Struts2之一个Action包含多个控制处理逻辑

http://www.cnblogs.com/freeabyss/p/3290297.html

一、使用Action的动态方法调用

    如果一个页面包含多个按钮,系统分别提交给Action的不同方法处理.此时可以采用DMI(Dynamic Method Invocation,动态方法调用)来处理这种请求。动态方法调用是指表单元素的Action并不是直接等于某个Action名字,而且以如下形式指定表单的Action属性:

?
1 2 3 action="ActionName!methodName"

 

其中一个按钮的代码如下:

上述代码中指定“注册”按钮被单击时触发regist函数,该函数的代码如下:

 

上述JavaScript代码改变了表单元素的Action属性,修改后的属性为login!regist,其实质就是将该表单提交给login Action的regist方法处理。

struts.xm中的配置:

/error.jsp/welcome.jsp

 

注意:使用动态方法调用前,必须设置Struts2允许动态方法调用,需要设置struts.enable.DyanmicMethodInvocation常量为true。

二、指定method属性及使用通配符

    1)使用method属性

/error.jsp/welcome.jsp

/error.jsp/welcome.jsp

 

     对应的javaScript代码为:

 

function regist(){targetForm = document.forms[0];targetForm.action = "regist";
}

 

    2)使用通配符

在上述的struts.xml文件中,两个Action定义绝大部分相同,可见这种定义相当冗余,为了解决这个问题,Struts2可以使用通配符。

在配置时,允许在指定name属性时使用通配符,然后在class、method属性及子元素中使用{N}的形式来代表前面第N个星号所匹配的子串。

示例一:

/error.jsp/welcome.jsp

 

例如,如果请求URL为loginAction.action,则调用LoginAction类的login方法,如果请求URL为registAction.action,则调用LoginAction类的regist方法。

示例二:

/error.jsp/welcome.jsp

 

例如,如果请求URL为Book_save.action,则对应的处理类为BookAction,处理方法为save方法。

    3)对子元素使用通配符

Struts2不仅允许在class属性、name属性中使用表达式,还可以在子元素中使用{N}表达式。

/{1}.jsp

 

上面的Action的定义可以匹配任意的Action,所用的用户请求都可通过Action来处理,因为没有指定class属性,该Action使用ActionSupport来作为处理类,而且因为该ActionSupport类的execute方法返回success字符串, 即该Action总是直接返回result中指定的JSP资源,JSP资源使用表达式来生成资源名。上面Action定义的含义是如果请求a.aciton,则进入a.jsp页面;如果请求b.action,则进入b.jsp页面……

通过这种方式,可以避免让浏览者直接访问系统的JSP页面,而是让Struts2框架来管理所有用户请求。

对于使用Struts2框架的应用而言,尽量不要让超级链接直接连接到某个视图资源,因为这种方式增加了额外的风险。推荐将所有请求都发送给Struts2框架,让框架来处理用户请求,即使只是简单的超级链接。

    4)关于因通配符带来的优先级的问题。

假设有URL为abcAction.action的请求,在struts.xml文件中配置了如下三个Action,它们的name的值分别为:abcAction、*Action和*,则这个请求将会被名为abcAction的Action处理。

假设有URL为defAction.action的请求,在struts.xml文件中配置了如下三个Action,它们的name的值分别为:abcAction、*Action和*,则*Action不会比*更优先匹配defAction.action的请求,而是先找到那个Action,就会由那个Action来处理用户请求。

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部