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
}
public String del(){
return "success";
}
public String update() {
return "success";
}
public String query() {
return "success";
}
}
步驟二、配置此Action,為了清晰明瞭,專為此Action,建立一個配置檔案crud.xml,主要內容如下:
<struts>
<package name="crud" extends
<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
</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頁面了。