Struts2之一個action中多個方法的實現


本篇文章為大家講述一下Struts2中一個action里有多個方法的處理

1.首先我們可以看到這個自定義action中有4個方法

public class FirstAction extends ActionSupport{
    public String list(){
        return "list";
    }
    public String add(){
        return "add";
    }
    public String upd(){
        return "upd";
    }
    public String del(){
        return "del";
    }
}

這個action沒有實現Action接口而是繼承了ActionSupport類,而ActionSupport實現了Action接口並且對execute方法進行了實現,所以在這個自定義類中不需要實現execute方法。這個方法中定義了4個常見的方法,增刪改查,那么如何在struts.xml中正確配置呢,有如下幾種方法。

方法一:配置多個action

 

<action name="firstActionlist" class="cn.happy.day03.controller.FirstAction" method="list">
            <result name="list">day03/list.jsp</result>
</action>

<action name="firstActionadd" class="cn.happy.day03.controller.FirstAction" method="add">
            <result name="add">day03/add.jsp</result>
</action>

 

要注意:使用這種方法一定要在action節點里面指定對應的方法,method中必須指定方法。

那么我們想訪問哪個action只需要輸入對應的地址

例如:

 

 

 

缺點:代碼過於冗余

 

 

方法二:配置一個action

1 <action name="firstAction" class="cn.happy.day03.controller.FirstAction">
2             <result name="list">day03/list.jsp</result>
3             <result name="add">day03/add.jsp</result>
4             <result name="del">day03/del.jsp</result>
5             <result name="upd">day03/upd.jsp</result>
6 </action>

但此時我們如何訪問呢?

需要使用!分割action名稱和方法名稱

例如:

 

 

 

這種方法比較推薦,其代碼冗余性不會很差,相比較第一種來說。

 

方法三:通配符配置

 

<action name="*_*" class="cn.happy.day04pattern.controller.{1}" method="{2}">
            <result name="{2}">day04/{2}.jsp</result>
</action>

 

解析:name="*_*" ,相當於把action名稱和具體的方法名稱用_分隔,例如firstAction_list,firstAction_add,secondAction_list,然后用{1}占位表示具體的action類,后面的method則表示具體方法的占位,例如firstAction_list則被拆分成

<action name="firstAction_list" class="cn.happy.day04pattern.controller.firstAction" method="list">
            <result name="list">day04/list.jsp</result>
</action>

此方法同樣能實現

而我們在訪問的時候只需注意用_分隔就行

 

 優點:代碼簡潔

 缺點:可讀性較差,難以理解,受其他一些因素干擾(以后我們會提到)

 

 總結:我個人比較推薦第二種解決方法,第一種代碼量較大,第三種雖然代碼簡潔卻不穩定,而且可讀性較差。

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM