首先我們有一個action——useraction
public class useraction extends actionsupport
{
public string add()
{
return "add";
}
public string modify()
return "modify";
}
}
1 指定method
<package name="user" namespace="/userpath" extends="struts-default">
<action name=" useradd " class="com.xy.useraction" method="add">
<result name="add">add.jsp</result>
</action>
<action name=" usermodify " class="com.xy.useraction" method="modify">
<result name="modify">modify.jsp</result>
</package>
路徑:
userpath/useradd
userpath/usermodify
特點:
不靈活,crud四個操作就要配4個action。
2 動态方法調用dmi(dynamic method invocation)
<action name="user" class="com.xy.useraction">
<result name="modify">modify.jsp</result>
userpath/user!add
userpath/user!modify
靈活。隻要指定不同的方法就可以做不同的操作。
3 通配符
<package name="all" namespace="/" extends="struts-default">
<action name="*_*" class="com.xy.{1}action" method="{2}">
<result name="add">{1}_add.jsp</result>
<result name="modify">{1}_modify.jsp</result>
user_add
user_modify
更加靈活。整個項目甚至隻要配一個總的action。是指定方法的一個特殊的用法。不過我覺得用dmi可以将每個子產品分的清楚。
推薦的方法是動态調用,也就是dmi.
注意的問題:
但是:如果這樣輸入的話,會報錯(there is no action mapped for namespace [/front] and action name [helloword!add()] associated with context path [/struts2_10003].)
因為:struts2中預設不允許使用dmi
是以:需要在配置檔案中打開: <constant name="struts.enable.dynamicmethodinvocation" value="true"/>這樣大家在位址欄動态輸入就可以得到預期的頁面
2.如果想要利用dmi的方式傳遞參數的話:userpath/user!add?flag=true