天天看點

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