首先我们有一个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