- 浏览: 632733 次
- 性别:
- 来自: 武汉
文章分类
最新评论
-
lizhuang:
这个方法的内部实现主要是依赖于类加载器,一般的自己实现的类是用 ...
Java中getResourceAsStream的用法 -
prince4426:
回答评论都很精彩
Java中getResourceAsStream的用法 -
kexuetou:
美人如此多娇 写道可能这样总结更好,路径前不带'/',则是相对 ...
Java中getResourceAsStream的用法 -
guoxin91:
...
Java中getResourceAsStream的用法 -
美人如此多娇:
可能这样总结更好,路径前不带'/',则是相对路径;若带,则是绝 ...
Java中getResourceAsStream的用法
Struts2支持动态方法调用,它指的是一个Action中有多个方法时,系统根据表单元素给定的action来访问不同的方法,而不用写多个Action。
使用动态方法调用前必须设置Struts2允许动态方法调用,它是通过设置
struts.enable.DynamicMethodInvocation = true来完成的。
Struts2主要有3种方式实现动态方法调用(以下action请求的后缀均设置为do,而非默认的action):
(1). 修改页面Form的action请求方式
将页面上action的请求方式改为:action = “ActionName!MethodName.do”,示例:
Login.jsp …… var contextPath = “<%=request.getContextPath()%>”; <script type=”text/javascript”> function dynamicMethodInvoke(){ document.forms[0].action = contextPath + “Login!dynamicMethod.do”; document.forms[0].submit(); } </script> …… <input type=”button” value=”动态方法调用” onclick=”dynamoicMethodInvoke()”/> ……
当点击“动态方法调用”按钮时,执行dynamoicMethodInvoke方法,在此方法中修改提交的action为Login!dynamicMethod.do,它的意思是将表单提交给Login Action的dynamicMethod方法进行处理。
//LoginAction.java public class LoginAction { …… public String dynamicMethod() throws Exception{ …… return “success”; } public String execute() throws Exception{ …… if (…){ return “error”; } …… return “success” } }
通过这种方式,可以在一个Action中包含多个方法,通过指定不同的action属性来提交给Action的不同方法进行处理。
对于使用动态方法调用的方法,它的声明与系统默认的execute方法的方法声明只有方法名不同,其他的如参数、返回值类型都必须相同。
(2). 指定action的method属性
另一种动态调用方式是在struts.xml中指定action的method属性,这样可以让Action类调用指定方法,而不是默认的execute方法来处理请求。示例:
//struts.xml …… <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>
上述配置中两个action的实现类均为com.demo.LoginAction,他们的实现类虽然相同,但处理逻辑却不同,处理逻辑通过method方法指定,其中名为Login的Action对应的处理逻辑为默认的execute方法,而名为Registry的Action对应的处理逻辑则为method指定的registry方法。
(3). 使用通配符
仔细看上面struts.xml中两个action的定义,可以发现他们除了name和method属性不同以外,其余的都一样,这种定义相当的冗余,为了解决这种类型的问题,Struts2提供了通配符定义方式。
在配置<action/>元素时,需要指定name、class、method等属性,这3个属性都支持通配符,在使用通配符定义Action的name属性时,相当于一个元素action定义多个逻辑Action。(2)中的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.do的模式,都可通过该Action进行处理,而method属性使用了一个表达式{1},该表达式的值就是name属性中第一个*的值,例如,用户请求的URL为LoginAction.do,则调用com.demo.LoginAction类的Login方法来处理,如果请示的URL为RegistryAction.do的话,则调用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.do时,其中*的值为Login,该值传入class属性,即该Action的处理类为com.demo.LoginAction;而如果请求为RegistryAction.do时,则该Action的处理类将变为com.demo.RegistryAction。
Struts2允许在class属性和method属性中同时使用表达式,示例如下:
<action name=”*_*” class=”com.demo.{1} method=”{2}” />
不难看出,只要满足*_*模式的Action都会被其处理,例如有Order_Booking.do请求到来,由于第一个*的值为Order,第二个*的值为Booking,那么意味着将会调用com.demo.Order处理类中的Booking方法来处理用户请求。
Struts2除了允许在name、class、method中使用表达式外,在<result/>元素中也可以使用表达式,如下:
<action name=”*Action” class=”com.demo.{1}Action method=”{1}” > <result name=”success”>/{1}.jsp</result> </action>
当请求为LoginAction.do时,将调用com.demo.LoginAction处理类中的Login方法处理用户的请求,当返回为success时,显示/Login.jsp页面。
注意:在使用通配符后,除非请求的URL与Action的name属性绝对相同,否则将按Action在struts.xml中定义的先后顺序来决定由哪个Action来处理用户请求。
对于一些只是简单的转发操作,如超级链接等的请求,可以定义name为*的Action来处理,此外,Struts2框架允许在struts.xml中使用<default-action-ref/>元素定义一个默认Action来处理用户请求:
<package name=”demo” extends=”struts-default” namespace=”/”> <action name=”defaultAction” class=”com.demo.DefaultAction”> <result>/default.jsp</action> </action> <default-action-ref name=”defaultAction” /> </package>
<default-action-ref/>的name属性为struts.xml中一个已经定义好的Action。
评论
想问一下,第三种方法,是不是不能指定namespace啊?
我加namespace就报404错误,不加就OK。
发表评论
-
HTTP协议解析
2010-01-27 20:39 4470掌握HTTP虽然不是必须的,但是如果你知道它的工作原理,那么在 ... -
TOMCAT指定JDK
2010-01-14 17:13 2361在windows环境下以批处理文件方式启动tomcat,只要运 ... -
Struts2的国际化
2010-01-01 11:30 1123Struts2国际化分为三类: ... -
总结Struts2的经典输入校验
2009-12-30 16:59 20731,输入校验介绍 Struts2提供了功能强大的输入校验机制 ... -
浅谈Struts2的内建校验器
2009-12-30 16:16 1268Struts2已经为我们准备了一些内建校验器,我们可以直接使用 ... -
Struts2输入校验
2009-12-30 16:12 1578struts2的输入校验针对输入进行业务规则的校验,譬如是否必 ... -
Struts2拦截器原理
2009-12-27 21:02 32991. 什么是拦截器 拦截器,在AOP(Aspect-O ... -
Struts2多文件上传
2009-12-27 17:36 1355Struts2也可以很方便地实现多文件上传。 在输入表 ... -
Struts2文件上传
2009-12-27 16:52 14871.文件上传原理 表单元素的enctype属性指定 ... -
Struts2 访问request、session和application对象
2009-12-27 15:28 3786在传统的Web开发中,经常会用到Servlet API中的Ht ... -
Struts2类型转换
2009-12-26 23:01 1645一、 struts2类型转换一 1、struts2的类型转 ... -
Struts2请求参数的接收
2009-12-26 22:24 15841)--采用基本类型接收请求参数(get/post) ... -
Struts2指定多个配置文件
2009-12-26 15:50 2829如果配置文件struts.xml的内容太多,或者是 ... -
Struts2命名空间
2009-12-26 15:24 1581Struts.xml命名空间规则 包的na ... -
Struts2框架的处理流程
2009-12-26 15:07 42221. Struts2架构图 请求首先通过F ... -
Struts2的常量详解
2009-12-26 11:43 3405通常struts2加载struts2常 ... -
HTML form包含的元素
2009-12-25 17:01 1735HTML form elements Object ... -
Struts2.1.x快速入门(二)
2009-12-23 20:02 1105------------------------------- ... -
Struts2.1.x快速入门(一)
2009-12-23 17:21 1185------------------------------- ... -
Hibernate常见集合映射(Set,List Array,Map,Bag)
2009-12-06 14:42 3687Hibernate常见的集合映射主要有Set,List,Arr ...
相关推荐
NULL 博文链接:https://takeme.iteye.com/blog/1631525
NULL 博文链接:https://cdxs2.iteye.com/blog/1925232
Struts2_动态方法调用,使用struts2架构的动态方法进行资源调用
主要介绍了详解Struts2动态方法调用,涉及调用方法的代码,具有一定参考价值,需要的朋友可以了解下。
struts 1框架的动态调用也许你会,但是struts2 的动态调用更经典,这个文档让你玩转struts 2 动态调用.......
struts动态访问调用之一,采用method属性,同一个Action内的不同方法来响应用户请求
struts2动态调用之通配符,相当于是改进的method动态调用方法,减少对同一action不同method的多次配置
struts2利用通配符调用同一个Action里面不同的方法,在struts.xml配置文件中将请求方法的不相同部分抽象成“*".
struts2中动态方法的调用,如何实现动态方法调用
本文档主要介绍了struts2中API耦合的三种方法以及动态方法调用(Dynamic Method Invoked)的两种方法,希望对你有所帮助,谢谢!
利用Struts 2框架创建一个web项目chap2_e22,实现用户登录过程。具体要求是在loginAction类中分别用login()和registered()处理用户登录和注册的过程,分别创建login.jsp和register.jsp两个页面实现登录和注册的...
带有分页,分页跳转,部门员工表的CRUD,hibernate注解方式操作实体,struts2动态方法调用
Struts2中直接和间接访问ServletAPI以及动态方法调用之感叹号
Struts2调用EJB异常项目包,出现的问题以及解决方案参见EJBStruts.zip中的说明.txt 以及博客 http://blog.csdn.net/icecream0/article/details/7167853
struts2实验一:动态方法调用+请求参数的获取+简单的表单数据验证
主要介绍了struts中动态方法调用使用通配符的相关资料,非常不错,具有参考借鉴价值,感兴趣的朋友一起看看吧
参考博文:http://blog.csdn.net/u011638419/article/details/41773411
Webservice+spring+struts小例子,简单方法调用
如题,Struts2登陆+输入验证+动态调用实例,使用MyEclipse导入直接就可以运行