ssh学习:struts2的动态调方法调用

struts2的动态方法调用

       在默认的情况下,一个action类只能有一个方法execute()能被调用,这样的话,再开发当中就会需要些很多的action类,在配置文件struts.xml文件当中也要写很多的配置文件。要是能够灵活的运用struts2的动态方法调用就可以很好的解决这个问题了。

那么问题来了,怎么来实现struts2的动态方法调用呢?

实现struts2动态方法调用有三种方法:

  1. 使用感叹号
  2. 在配置文件中的action中,指定method属性
  3. 使用通配符

该怎么具体的使用这三种方法去实现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方法。

 

应该还有更好的技术或者方法可以达到相同的目的,有待进一步学习了解

你可能感兴趣的:(ssh学习:struts2的动态调方法调用)