Struts2的动态Action实现
在Struts2中动态方法调用有三种方式。
一、指定method属性
在struts.xml中指定action的method属性。
<package name=”demo1” extends=”struts-default”>
<action name=”Login” class=”com.demo.LoginAction” />
<result name=”input”>/input.jsp</result>
<result name=”error”>/error.jsp</result>
<result name=”success”>/success.jsp</result>
</action>
<action name=”Registry” class=”com.demo.LoginAction” method=”registry” />
<result name=”input”>/input.jsp</result>
<result name=”error”>/error.jsp</result>
<result name=”success”>/success.jsp</result>
</action>
</package>
处理逻辑通过method方法指定,其中名为Login的Action对应的处理逻辑为默认的execute方法,而名为Registry的Action对应的处理逻辑则为method指定的registry方法。
二、感叹号方式(需要开启),官网不推荐使用这种方式,建议大家不要使用。
三、通配符方式(官网推荐使用)
在配置<action>元素时,需要指定name、class、method等属性,这3个属性都支持通配符,在使用通配符定义Action的name属性时,相当于一个元素action定义多个逻辑Action。
第一种方法中的action配置可以更改为:
<package name=”demo” extends=”struts-default”>
<action name=”*Action” class=”com.demo.LoginAction” method=”{1}”>
<result name=”input”>/input.jsp</result>
<result name=”error”>/error.jsp</result>
<result name=”success”>/success.jsp</result>
</action>
</package>
上述定义不是定义了一个普通的action,而是定义一系列的action,只要用户请求的URL满足*Action的模式,都可通过该Action进行处理,而method属性使用了一个表达式{1},该表达式的值就是name属性中第一个*的所代表的值,例如,用户请求的URL为LoginAction,则*所代表的是Login字符串,故调用com.demo.LoginAction类的Login方法来处理。如果请示的URL为RegistryAction的话,则调用com.demo.LoginAction的Registry方法进行处理。
以下配置在class属性中使用通配符:
<package name=”demo” extends=”struts-default”>
<action name=”*Action” class=”com.demo.{1}Action”>
<result name=”input”>/input.jsp</result>
<result name=”error”>/error.jsp</result>
<result name=”success”>/success.jsp</result>
</action>
</package>
此配置中没有指定method属性,所以请示由默认的execute方式来执行,但class中使用了通配符,它的含义与上面一样,例如,当用户请求的为LoginAction时,其中*的值为Login,该值传入class属性,即该Action的处理类为com.demo.LoginAction;而如果请求为RegistryAction时,则该Action的处理类将变为com.demo.RegistryAction。
Struts2允许在class属性和method属性中同时使用表达式,示例如下:
<action name=”*_*” class=”com.demo.{1} method=”{2}” />
只要满足*_*模式的Action都会被其处理,例如有Order_Booking请求到来,由于第一个*的值为Order,第二个*的值为Booking,那么意味着将会调用com.demo.Order处理类中的Booking方法来处理用户请求。
Struts2在<result>元素中也可以使用表达式,如下:
<action name=”*Action” class=”com.demo.{1}Action method=”{1}” >
<result name=”success”>/{1}.jsp</result>
</action>
当请求为LoginAction时,将调用com.demo.LoginAction处理类中的Login方法处理用户的请求,当返回为success时,显示/Login.jsp页面。
注意:在使用通配符后,除非请求的URL与Action的name属性绝对相同,否则将按Action在struts.xml中定义的先后顺序来决定由哪个Action来处理用户请求。
Struts2的动态Action实现的更多相关文章
- Struts2的动态Action和全局跳转视图以及配置各项默认值
1:Struts2的默认访问后缀是.action(特别需要注意的是改了配置文件web.xml或者struts.xml需要重启服务器) 2:Struts2中常用的常量介绍:<!-- 一:全局配置 ...
- struts2 动态Action
1.java 2.struts.xml struts2.5,默认关闭动态Action,着色的是开启和使用动态action 3.JSP 小结:访问时,用!后跟方法名的方法,方法返回值----->r ...
- Struts2的动态方法,及result跳转方式,全局结果以及默认的action的配置
Action动态方法的调用 首先我们需要在struts.xml中去配置一个常量值如下 那么去哪找呢?找到Struts-core.jar并打开 method属性 <action name=&quo ...
- Struts2.3动态调用报 No result defined for action 错误
struts 2.3.16 採用动态调用发现不工作报404 not found,网上查找原因: 1.由于:struts2中默认不同意使用DMI 所以:须要在配置文件里打开: <constant ...
- 【学习笔记】Struts2之一个Action包含多个控制处理逻辑
一.使用Action的动态方法调用 如果一个页面包含多个按钮,系统分别提交给Action的不同方法处理.此时可以采用DMI(Dynamic Method Invocation,动态方法调用)来 ...
- Struts2中动态方法的调用
Struts2中动态方法调用就是为了解决一个action对应多个请求的处理,以免action太多. 主要有一下三种方法:指定method属性.感叹号方式和通配符方式.推荐使用第三种方式. 1.指定me ...
- 用js模拟struts2的多action调用
近期修了几个struts2.1升级到2.3后动态方法调用失效的bug,深有感悟, 原始方法能够參考我之前的博文:struts2.1升级到2.3后动态调用方法问题 可是我那种原始方法有一个局限,就是在s ...
- web10 动态action的应用
电影网站:www.aikan66.com 项目网站:www.aikan66.com游戏网站:www.aikan66.com图片网站:www.aikan66.com书籍网站:www.aikan66.co ...
- struts2的动态方法调用(DMI)和通配符映射
动态方法调用 1.Struts2默认关闭DMI功能,需要使用需要手动打开,配置常量 struts.enable.DynamicMethodInvocation = true 2.使用“!”方法,即 ...
随机推荐
- 微信小程序 - "锚点"功能的实现
“锚点”功能在实际应用设计的好,可以提高用户体验.今天碰到一个类似下面功能: 由于页面数据比较多,除了做些上拉加载,下拉刷新等优化.还可以进行进行分类,如上图.功能要求:点击导航的菜单,相应页面的分类 ...
- LoadRunner中常用函数参考手册
基础篇1:LoadRunner中常用函数参考手册 常用函数列表 web_url web_submmit_form VS web_submmit_data VS web_custom_request w ...
- KVM-克隆和快照管理
kvm 虚拟机有两部分组成:img镜像文件和xml配置文件 /etc/libvirt/qemu #xml配置文件目录,存在虚拟机所有的详细信息 1.kvm虚拟机克隆 克隆命令 virt-clone - ...
- web.config 数据库连接
方法一:connectionsStrings 首先配置web.config文件 <configurations> <connectionStrings> <add nam ...
- vue v-bind绑定属性和样式
这期跟大家分享的,是v-bind指令.它可以往元素的属性中绑定数据,也可以动态地根据数据为元素绑定不同的样式. 绑定属性 最简单的例子,我们有一张图片,需要定义图片的src.我们可以直接在元素的属性里 ...
- hdu 4055 Number String (基础dp)
Number String Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- BZOJ 2084 [Poi2010]Antisymmetry(manacher)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2084 [题目大意] 对于一个01字符串,如果将这个字符串0和1取反后, 再将整个串反过 ...
- 【动态规划】【滚动数组】【搜索】Playrix Codescapes Cup (Codeforces Round #413, rated, Div. 1 + Div. 2) D. Field expansion
显然将扩张按从大到小排序之后,只有不超过前34个有效. d[i][j]表示使用前i个扩张,当length为j时,所能得到的最大的width是多少. 然后用二重循环更新即可, d[i][j*A[i]]= ...
- Problem A: 逆序输出数列
#include<stdio.h> int main(void) { int n,i,a[100]; while(scanf("%d ",&n)!=EOF) { ...
- DOM操作(一)
DOM中比较常用的类型有Element类型,Text类型,Attr类型,Comment类型(注释),Document类型(文档),DocumentFragment类型. Element类型 提供了对元 ...