这里介绍两种动态调用action中的方法 (推荐使用*通配符的这种)

第一种,struts2里面有常量直接启用就好了,

配置好之后再访问的时候,只需要在原来的访问地址后面加上!方法名

eg:http://localhost:8080/Struts/DemoAction!delete

配置代码如下

<?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
	<!--配置动态方法调用是否开启常量 
		默认是关闭的
		http://localhost:8080/Struts/DemoAction!delete
	 -->
	<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
	<package name="hello" namespace="/" extends="struts-default">
		<action name="DemoAction" class="test.DemoAction">
			
			<result name="add" >/add.jsp</result>
			<result name="delete" >/delete.jsp</result>
			<result name="update" >/update.jsp</result>
			<result name="find" >/find.jsp</result>
		</action>
		
		
	</package>
</struts>

action代码如下

package test;

public class DemoAction{
	
	public String add(){	
		return "add";
	}
	public String delete(){	
		return "delete";
	}
	public String update(){	
		return "update";
	}
	public String find(){	
		return "find";
	}
}

第二种方法,通配符匹配

eg:http://localhost:8080/Struts/DemoAction_add (你的action name怎么写的地址就怎么写,只是把*换成你的方法名就好了)

配置如下

<?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
	
	<package name="hello" namespace="/" extends="struts-default">
		<!--
			 动态方法调用:通配符方式
			使用{1} 取出第一个星号通配的内容
			http://localhost:8080/Struts/DemoAction_add
		 -->
		<action name="DemoAction_*" class="test.DemoAction" method="{1}">			
			<result name="add" >/add.jsp</result>
			<result name="delete" >/delete.jsp</result>
			<result name="update" >/update.jsp</result>
			<result name="find" >/find.jsp</result>
		</action>
	</package>
</struts>

 

代码全部亲测有效

下面给一张eclipse的图