我們先簡單寫一個Action的類,方便對應(yīng)說明
每種方法我們都實(shí)現(xiàn)UserAction中的3個方法
package test;
public class UserAction {
public String execute(){
return "success";
}
public String add(){
return "add";
}
public String delete(){
return "delete";
}
}
-
method屬性區(qū)分調(diào)用action
這種方法是使用多個action每個action的name都不同來區(qū)分,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>
如果這樣寫代碼就會很多,不夠簡潔
-
動態(tài)方法調(diào)用
這個是使用struts2中的(!)符來動態(tài)的調(diào)用對應(yīng)的方法
<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>
調(diào)用的語法
actionName!methodName
或者actionName?method:methodName
另外這一句要加在前面
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
因?yàn)檫@種調(diào)用存在安全問題,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>
如果我要調(diào)用UserAction中的add()方法,我們的action就要寫User_add
{1}就代表了User,{2}就代表了add
這樣寫就是使struts的action配置文件簡潔了很多