天天看点

Struts.xml中Action的method与路径的三种匹配方法

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