struts2的动态方法调用
在默认的情况下,一个action类只能有一个方法execute()能被调用,这样的话,再开发当中就会需要些很多的action类,在配置文件struts.xml文件当中也要写很多的配置文件。要是能够灵活的运用struts2的动态方法调用就可以很好的解决这个问题了。
那么问题来了,怎么来实现struts2的动态方法调用呢?
实现struts2动态方法调用有三种方法:
- 使用感叹号
- 在配置文件中的action中,指定method属性
- 使用通配符
该怎么具体的使用这三种方法去实现struts2的动态方法调用
1.使用感叹号实现struts2动态方法访问
在使用叹号实现动态方法访问时候,一定要在配置文件struts.xml中配置一下属性:
<!-- 动态加载访问 --> <constant name="struts.enable.DynamicMethodInvocation" value="true" />
下面是核心代码
struts的action
<action name="dynamicAction" class="com.usc.geowind.lilin.actions.DynamicAction"> <result name="success"> /success.jsp </result> </action>
action类
public class DynamicAction extends ActionSupport { public String execute() throws Exception { return super.execute(); } public String add() { System.out.println("struts2动态访问方法:add"); return SUCCESS; } public String delete(){ System.out.println("struts2动态访问方法:delete"); return SUCCESS; } }
从action的配置就可以看出,默认情况下请求访问action都会触发execute方法,若要动态访问add/delete方法只要在访问action链接后加上:!add或者!delete就可以了
比如访问add方法:http://localhost:8080/项目名/dynamicAction!add
2.在配置文件struts.xml中的action标签内只能属性method的是来实现struts2的动态方法访问
在action标签中指定method的值。method的值为action类中访问的方法,改属性默认值为execute
比如访问add方法。
<!-- method的值指定访问的是哪个方法,默认值为:execute --> <action name="dynamicAction" class="com.usc.geowind.lilin.actions.DynamicAction" method="add"> <result name="success"> /success.jsp </result> </action>
这样我们就可以通过指定method的值来指定action访问的具体是action累的具体哪个方法了。若是指定为通配符:*,那么所有方法均可以访问
3.使用通配符实现struts2动态方法访问
(1)method值指定为:* ,这样均可访问
(2)使用*与{}搭配:比如:
<action name="dynamicAction_*" class="com.usc.geowind.lilin.actions.DynamicAction" method="{1}"> <result name="success"> /success.jsp </result> </action>
这样指定method的值为第一个星号,就会访问到星号代表的action的方法中去。
当访问链接为:http://localhost:8080/项目名/dynamicAction_add 就是访问改action类下的add方法
当访问链接为:http://localhost:8080/项目名/dynamicAction_delete 就是访问delete方法
亦可以更简单的比编写写action配置,使得配置文件简单。例如:
<action name="*_*" class="com.usc.geowind.lilin.actions.{1}" method="{2}"> <result name="success"> /success.jsp </result> </action>
使用两个星号,这样可以访问第一个星号的action类,第二个星号是访问action类的方法名
比如:http://localhost:8080/项目名/DynamicAction_add 该链接访问的是com.usc.geowind.lilin.actions.DynamicAction这一个action类下的add方法。
应该还有更好的技术或者方法可以达到相同的目的,有待进一步学习了解