当前位置: 首页 > news >正文

Struts 学习笔记之Action

下面是Struts中的一些常用Action如

DispatchAction/LookupDispatchAction/MappingDispatchAction/ForwardAction/IncludeAction的总结

 1 .DispatchAction extends BaseAction

一般的Action如<action path="/createUser" type="examples.UserAction">,在这里UserAction只需要继承父类(extends Action类),然后重写父类的execute方法,在execute中实现具体的控制转向。

对于同一个formbean上进行的新增、修改、删除等,我们需要分发不同的Action,这里有两种做法。

① 一种是通过在execute方法中if判断进行不同的转向:

㈠ UserAction 类的execute方法中

String method = request.getParameter("method");

if (method.equals("create")) {

     ……

    return mapping.findForward("createUser");

}

if (method.equals("save")) {

    ……

    return mapping.findForward("saveUser");

}

 

㈡ struts-config.xml 中:

<action path="/createUser" type="examples.UserAction"

        name="userForm"

        scope="request">

    <forward name="createUser" path="/pages/listUser.jsp"/>

</action>

<action path="/saveUser" type="examples.UserAction"

        name="userForm"

        scope="request">

    <forward name="saveUser" path="/pages/saveUser.jsp"/>

</action>

 

㈢ 可以在页面中定义一个隐藏变量来指明相应的操作

// 这里最好不要使用<html:hidden property="method"/>

// 因为这种写法需要在formbean中定义相应的property,我们可以采用普通隐藏域

<input type="hidden" name="method"/>

然后定义一个javascript函数,我们可以在通过点击提交按钮的时候,在函数中修改它的值。

<script>

    function set(operation) {

        with (document.forms[0]) {

            method.value = operation;

        }

    }

</script>

点击提交按钮时,通过set方法设置提交的method属性值:

<html:submit οnclick="set('create');">CREATE</html:submit>

<html:submit οnclick="set('save');">SAVE</html:submit>

 

 

② 第二就是使UserAction继承DispatchAction,不需要重写execute方法:

public ActionForward create(ActionMapping mapping,

                           ActionForm form,

                           HttpServletRequest request,

                           HttpServletResponse response)

        throws Exception {

    // 進行一些create的逻辑

    // ……

    return mapping.findForward("createUser");

}

public ActionForward save(ActionMapping mapping,

                           ActionForm form,

                           HttpServletRequest request,

                           HttpServletResponse response)

        throws Exception {

    // 進行一些save的逻辑

    // ……

    return mapping.findForward("saveUser");

}

 

㈡ DispatchAction 在配置上和一般Action稍有不同,就是要在Action配置中多一个parametr属性,这个属性可以指定执行DispatchAction中对应的方法。

struts-config.xml 中:

<action path="/processUser" type="examples.UserAction"

        name="userForm"

        scope="request"

        parameter="method">

    <forward name="createUser" path="/pages/listUser.jsp"/>

    <forward name="saveUser" path="/pages/saveUser.jsp"/>

</action>

 

㈢ 我们在这里指定了parameter的值为method,则页面提交时我们必须指定提交时action的method参数来确定去我们想要调用哪个Action方法。

<script>

    function submitForm(operation) {

        with (document.forms[0]) {

            action = action + '?method = '+ operation;

            submit();

        }

    }

</script>

点击提交按钮时,通过submitForm方法设置提交时action的method参数:

<html:form action="/processUser" method="get">

<html:button οnclick="submitForm('create');">CREATE</html:button>

<html:button οnclick="submitForm('save');">SAVE</html:button>

</html:form>

 

2 . LookupDispatchAction extends DispatchAction

LookupDispatchAction 继承DispatchAction, 在上面的 ② ㈢ 中对于同一个页面上的多个submit按钮,不需要那么多复杂的js函数来指定提交时action的method参数,即上面的submitForm(operation)方法可以省去,LookupDispatchAction其用法为:

① 用MessageResource将按钮的文本和ResKey相关联,例如button.save=保存; ② ㈢ 中用LookupDispatchAction代替就是:

<html:form action="/processUser" method="get">

<html:submit property=" method ">

    <bean:message key=" button.create "/>

</html:submit>

<html:submit property=" method ">

    <bean:message key=" button.save "/>

</html:submit>

</html:form>

 

② 在Action配置中多一个parametr属性,属性值与submit按钮的property属性值相同,这个属性可以指定执行LookupDispatchAction中对应的方法。

struts-config.xml 中:

<action path=" /processUser " type="examples.UserAction"

        name="userForm"

        scope="request"

        parameter=" method ">

    <forward name="createUser" path="/pages/listUser.jsp"/>

    <forward name="saveUser" path="/pages/saveUser.jsp"/>

</action>

 

使UserAction继承LookupDispatchAction,重写getKeyMethodMap()方法, 将ResKey和MethodName对应起来, 如下:
protected Map getKeyMethodMap() {

    Map map = new HashMap();

    map.put("button.create", "create");

    map.put("button.save", "save");

    return map;

}

 

注: DispatchAction 类使用请求参数的值确定调用哪种方法,而LookupDispatchAction类利用请求参数值,反向查询资源绑定,并将它与类中的一种方法匹配,实际上这两种方法有异曲同工之处。

 

3 . MappingDispatchAction extends DispatchAction

DispatchAction 指定了parameter的值为method,则页面提交时我们必须指定提交时action的method参数来确定去我们想要调用哪个Action方法,而MappingDispatchAction直接通过struts-config.xml将多个action-mapping映射到同一个Action类的不同方法:

<action path="/createUser" type="examples.UserAction"

        name="userForm"

        scope="request"

        parameter="create">

    <forward name="createUser" path="/pages/listUser.jsp"/>

</action>

<action path="/saveUser" type="examples.UserAction"

        name="userForm"

        scope="request"

        parameter="save">

    <forward name="saveUser" path="/pages/saveUser.jsp"/>

</action>

 

然后UserAction继承MappingDispatchAction即可:

public ActionForward save(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception

public ActionForward edit(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception

 

注: 查看MappingDispatchAction的源码:

protected String getMethodName(ActionMapping mapping, ActionForm form,

    HttpServletRequest request, HttpServletResponse response,

    String parameter) throws Exception {

    // Return the unresolved mapping parameter.

    return parameter;

}

可以看到它调用的方法是直接返回struts-config.xml中parameter的值。

 

4 . ForwardAction extends BaseAction

相当于<jsp:forward>功能,不需要配置formbean和action,可以直接进行跳转,只需要在struts-config.xml中配置:

<action path="/listUser"

        type="org.apache.struts.actions.ForwardAction"

        scope="request"

        parameter="/pages/listUser.jsp">

</action>

parameter 属性用于指定forward到哪个页面,path、type、parameter三个属性为必须,其他可省略。

 

5 . IncludeAction extends BaseAction

相当于<jsp:include>功能,需要在struts-config.xml中配置:

<action path="/listUser" type="org.apache.struts.actions.IncludeAction"

        name="userForm"

        scope="request"

        parameter="/pages/includepage.jsp">

</action>


相关文章:

  • 如何让Tomcat免安装就可以直接运行?
  • tomcat用户密码设置
  • Struts分页
  • java操作xml编程实例(sax)
  • ajax验证用户名是否可用
  • 正则表达式限制表单文本框输入内容
  • 正则表达式详解
  • js中innerHTML,innerText,outerHTML的用法与区别
  • Struts防止重复提交
  • html:multibox 的使用
  • Ie和firefox的Js区别
  • 软件工程师不可不知的10个概念
  • MySQL的数据类型
  • java.sql.date 与 java.util.date
  • JAVA日期类型
  • Javascripit类型转换比较那点事儿,双等号(==)
  • JavaScript对象详解
  • JavaScript中的对象个人分享
  • Lucene解析 - 基本概念
  • MySQL用户中的%到底包不包括localhost?
  • PAT A1120
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • 测试开发系类之接口自动化测试
  • 给Prometheus造假数据的方法
  • 关于for循环的简单归纳
  • 目录与文件属性:编写ls
  • 排序(1):冒泡排序
  • 用jQuery怎么做到前后端分离
  • ​云纳万物 · 数皆有言|2021 七牛云战略发布会启幕,邀您赴约
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #每日一题合集#牛客JZ23-JZ33
  • #微信小程序:微信小程序常见的配置传旨
  • $().each和$.each的区别
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (ZT)薛涌:谈贫说富
  • (接口自动化)Python3操作MySQL数据库
  • (蓝桥杯每日一题)平方末尾及补充(常用的字符串函数功能)
  • (一)搭建springboot+vue前后端分离项目--前端vue搭建
  • (转)编辑寄语:因为爱心,所以美丽
  • (转)程序员技术练级攻略
  • * CIL library *(* CIL module *) : error LNK2005: _DllMain@12 already defined in mfcs120u.lib(dllmodu
  • **PHP分步表单提交思路(分页表单提交)
  • ..回顾17,展望18
  • .class文件转换.java_从一个class文件深入理解Java字节码结构
  • .net 怎么循环得到数组里的值_关于js数组
  • .NET/C# 获取一个正在运行的进程的命令行参数
  • .Net程序猿乐Android发展---(10)框架布局FrameLayout
  • @Not - Empty-Null-Blank
  • [acwing周赛复盘] 第 94 场周赛20230311
  • [BZOJ] 1001: [BeiJing2006]狼抓兔子
  • [flume$2]记录一个写自定义Flume拦截器遇到的错误
  • [IE技巧] IE 中打开Office文件的设置
  • [Intel Edison开发板] 05、Edison开发基于MRAA实现IO控制,特别是UART通信
  • [Jquery] 实现温度计动画效果
  • [JS入门到进阶] 7条关于 async await 的使用口诀,新学 async await?背10遍,以后要考!快收藏