1. 程式人生 > >struts2.Action中的method屬性配置

struts2.Action中的method屬性配置

.Action中的method屬性

在struts1.x中我們知道通過繼承DispatchAction可以實現把多個Action進行統一操作,在struts2中實現action的統一操作也很簡單。我們以crud操作為例,把crud集中到一個Action中。
步驟一、建立CRUDAction,內容如下:
package com.asm;

import com.opensymphony.xwork2.ActionSupport;

public class CRUDAction extends ActionSupport {

    public String add() {

       return

"success";

    }

    public String del(){

       return "success";

    }

    public String update() {

       return "success";

    }

    public String query() {

       return "success";

    }

}

步驟二、配置此Action,為了清晰明瞭,專為此Action,建立一個配置檔案crud.xml,主要內容如下:
<struts>

    <package name="crud" extends

="struts-default"namespace="/crud">

       <action name="add" class="com.asm.CRUDAction"method="add">

           <result name="success">/crud/addSuccess.jsp</result>

       </action>

       <action name="del"class="com.asm.CRUDAction" method="del">

           <result

name="success">/crud/delSuccess.jsp</result>

       </action>

       <action name="update" class="com.asm.CRUDAction"method="update">

           <result name="success">/crud/updateSuccess.jsp</result>

       </action>

       <action name="query" class="com.asm.CRUDAction"method="query">

           <result name="success">/crud/querySuccess.jsp</result>

       </action>

    </package>

</struts>

分析:上面的method方法的值來源於CRUDAction中方法的名字,這樣當我們訪問上面的每一個Action時,它實質是和method指定的方法關聯上。

步驟三、把crud.xml配置檔案併入struts.xml中,只需增加如下程式碼:
<include file="jack.xml"></include>

步驟四、編寫相應的jsp頁面,在此略去crud資料夾下的四個跳轉jsp頁面(addSuccess.jsp等),重點是crud.jsp頁面。內容如下:
<html>

<%

    String path=request.getContextPath();

%>

    <body>

       <a href="<%=path %>/crud/add.action">新增資料</a><br>

       <a href="<%=path %>/crud/del.action">刪除資料</a><br>

       <a href="<%=path %>/crud/query.action">查詢資料</a><br>

       <a href="<%=path %>/crud/update.action">修改資料</a><br>

    </body>

</html>
步驟五、釋出測試。
補充擴充套件,動態呼叫DMI不使用method實現統一.我們在crud.xml中增加如下內容:
<action name="op" class="com.asm.CRUDAction">

           <result name="success">/crud/op.jsp</result>

</action>

然後再在crud.jsp中定義如下連結:

<a href="<%=path %>/crud/op!add.action">新增資料</a><br>

<a href="<%=path %>/crud/op!del.action">刪除資料</a><br>

<a href="<%=path %>/crud/op!query.action">查詢資料</a><br>

<a href="<%=path%>/crud/op!update.action">修改資料</a><br>

注意檢視上面的連結地址,它們都是針對op action,然後再加地上“!+CRUDAction中相應的方法名”,最後再寫上.action即可以訪問到統一頁面op.jsp。這樣做雖然能減少頁面,但是由於它們實質用到的是同一個Action,所以這就意味著我們要使用的攔截器相同,相同的跳轉result。實際中這種方式很少使用,在此略作了解。如果不想使用動態方法呼叫,我們可以通過常量來關閉,即在struts.xml中增加如下配置:
<constant name="struts.enable.DynamicMethodInvocation" value="false"/>

擴充套件2:在CRUDAction中使用do。舉例:我們在CRUDAction中增加一個新的方法,內容如下:

    public String doMain(){

       return "success";

    }

然後再在在crud.xml中增加如下內容:

<action name="main" class="com.asm.CRUDAction"method="main">

           <result name="success">/crud/main.jsp</result>

</action>
注意:配置中method屬性值是doMain中去掉do後M小寫。然後再在crud.jsp中增加如下連結:
<a href="<%=path%>/crud/main.action">main頁面</a><br>

隨後便可以訪問到.../crud/main.jsp頁面了。