我们先简单写一个Action的类,方便对应说明
每种方法我们都实现UserAction中的3个方法
package test;
public class UserAction {
public String execute(){
return "success";
}
public String add(){
return "add";
}
public String delete(){
return "delete";
}
}
-
method属性区分调用action
这种方法是使用多个action每个action的name都不同来区分,struts.xml:
<struts>
<package name="test" extends="struts-default">
<action name="execute" class="test.UserAction">
<result name="success">/execute.jsp</result>
</action>
<action name="add" class="test.UserAction" method="add">
<result name="add">/add.jsp</result>
</action>
<action name="delete" class="test.UserAction" method="delete">
<result name="delete">/delete.jsp</result>
</action>
</package>
</struts>
如果这样写代码就会很多,不够简洁
-
动态方法调用
这个是使用struts2中的(!)符来动态的调用对应的方法
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
<package name="test" namespace="/" extends="struts-default">
<global-allowed-methods>add</global-allowed-methods>
<action name="User" class="test.UserAction">
<result name="success">/execute.jsp</result>
<result name="add">/add.jsp</result>
<result name="delete">/delete.jsp</result>
</action>
</package>
</struts>
调用的语法
actionName!methodName
或者actionName?method:methodName
另外这一句要加在前面
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
因为这种调用存在安全问题,2.5中是不允许的
<global-allowed-methods>add</global-allowed-methods>
add方法也要添加允许
-
通配符映射
struts提供了(*)星号通配符来解决大量action映射的问题
<struts>
<package name="test" extends="struts-default">
<global-allowed-methods>add</global-allowed-methods>
<action name="*_*" class="test.{1}Action" method="{2}">
<result name="{2}">{2}.jsp</result>
</action>
</package>
</struts>
如果我要调用UserAction中的add()方法,我们的action就要写User_add
{1}就代表了User,{2}就代表了add
这样写就是使struts的action配置文件简洁了很多