Action的創建一般可分爲兩種方式,第一是每個方法創建一個Action類,第二是一個Action中包含多個方法;在實際的開發中,一般不會採取第一種方案,因爲項目中有多少方法,就需要建立多少的Action類,類多且配置量巨大,所以我們經常採用一個Action對應多個方法的方式。
那麼問題來了,Struts2的Action中包含多個方法時如何調用?同樣有兩種方式可以選擇,1. 方法的動態調用 2.通過配置method屬性進行方法區分。請看下面的詳細介紹。
方法的動態調用
1、新建Action
package com.bjpowernode.struts2;
import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport {
private String messsage;
public String getMesssage() {
return messsage;
}
public void setMesssage(String messsage) {
this.messsage = messsage;
}
public String add() throws Exception {
messsage = "添加用戶";
return SUCCESS;
}
public String del() throws Exception {
messsage = "刪除用戶";
return SUCCESS;
}
public String update() throws Exception {
messsage = "修改用戶";
return SUCCESS;
}
public String list() throws Exception {
messsage = "查詢用戶";
return SUCCESS;
}
}
2、Struts.xml中配置Action
<package name="user-package" extends="struts-default">
<action name="user" class="com.bjpowernode.struts2.UserAction">
<result>/success.jsp</result>
</action>
</package>
3、JSP調用
調用格式爲:action名稱+!+方法名稱+後綴
JSP代碼:
<%@ page language="java" contentType="text/html; charset=GB18030"
pageEncoding="GB18030"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>Insert title here</title>
</head>
<body>
<a href="user!add.action">添加用戶</a><br>
<a href="user!del.action">刪除用戶</a><br>
<a href="user!update.action">修改用戶</a><br>
<a href="user!list.action">查詢用戶</a><br>
</body>
</html>
注意:
Action中的所有方法必須和execute方法一致(參數,返回值,異常最好也一樣)
動態調用參數配置,默認爲true,可以調用,否則不能調用
<constant name="struts.enable.DynamicMethodInvocation" value="false"/>
配置method屬性區分不同方法
struts.xml配置文件
<package name="user-package" extends="struts-default">
<action name="addUser" class="com.bjpowernode.struts2.UserAction" method="add">
<result>/success.jsp</result>
</action>
<action name="delUser" class="com.bjpowernode.struts2.UserAction" method="del">
<result>/success.jsp</result>
</action>
<action name="updateUser" class="com.bjpowernode.struts2.UserAction" method="update">
<result>/success.jsp</result>
</action>
<action name="listUser" class="com.bjpowernode.struts2.UserAction" method="list">
<result>/success.jsp</result>
</action>
</package>
這種方式的缺點是配置量大。
通配符簡化配置文件
對上面Struts.xml配置文件進行簡化:
<action name="*User" class="com.bjpowernode.struts2.UserAction" method="{1}">
<result>/success.jsp</result>
</action>
在Struts2的標籤class、name、method和result標籤上都可以使用通配符,通配符的作用就是爲了減少配置量,當然通配符需要建立在約定的基礎上。
小結
方法的動態調用,方式比較繁瑣,很容易寫錯,而且不易於後期維護和擴展;配置method屬性方式雖然配置量大,但是可以通過通配符來簡化配置文件。所有就實際使用情況來看,第二種方案使用比較廣泛。