使用Struts2動作
在Struts2中,會花大部分的時間用在用動作來處理工作。動作類包含業務邏輯,獲取資源包,保存數據,驗證,並選擇應發回給用戶的視圖的結果頁面。這是Struts2的核心,所以必須要了解動作的基本概念。
1. 動作 - Action
Struts 2動作不強迫你實現任何接口或擴展類,它只是需要你實現一個 execute()方法返回一個字符串來表示其應該返回的結果頁面。
package com.yiibai.user.action;
public class LoginAction{
//business logic
public String execute() {
return "success";
}
}
在struts.xml中,配置使用Action類動作(action)標記和類屬性。定義結果頁面用結果的標籤和動作名稱返回給用戶,可以用它來訪問動作類的名稱屬性。
現在,可以通過 .action 擴展名後綴訪問動作。
http://localhost:8080/Struts2Example/User/validateUser.action
默認.action是可配置的,只需要設置「struts.action.extension」的值,以滿足您的需要。
2. 可選動作接口
Struts 2帶有一個可選的動作接口(com.opensymphony.xwork2.Action)。通過實現這個接口,它帶來了一些方便和好處,看下面的源代碼:
package com.opensymphony.xwork2;
public interface Action {
public static final String SUCCESS = "success";
public static final String NONE = "none";
public static final String ERROR = "error";
public static final String INPUT = "input";
public static final String LOGIN = "login";
public String execute() throws Exception;
}
這個接口是非常簡單的,配有5常用常數值: success, error, none, input and logic。現在的動作類可以直接使用常量。
package com.yiibai.user.action;
import com.opensymphony.xwork2.Action;
public class LoginAction{
//business logic
public String execute() {
return SUCCESS;
}
}
不明白爲什麼很多Struts開發人員喜歡實現此動作接口,它更好地擴展了ActionSupport。
3. ActionSupport
Support 類,通常的做法是提供接口的默認實現。
ActionSupport (com.opensymphony.xwork2.ActionSupport), 一個非常強大和方便的類,它提供了幾個重要接口的缺省實現:
public class ActionSupport implements Action, Validateable,
ValidationAware, TextProvider, LocaleProvider, Serializable {
...
}
ActionSupport 類提供一些功能:
1. 驗證 – 聲明一個validate()方法,並在裏面實現驗證代碼。
2. 文字本地化 – 使用gettext()方法來獲得資源包的消息。
package com.yiibai.user.action;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport{
private String username;
private String password;
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
//business logic
public String execute() {
return "SUCCESS";
}
//simple validation
public void validate(){
if("".equals(getUsername())){
addFieldError("username", getText("username.required"));
}
if("".equals(getPassword())){
addFieldError("password", getText("password.required"));
}
}
}
在大多數情況下,應該擴展此類妥當,方便提供功能,除非你有理由不這樣做。這也是一個很不錯的學習類,以瞭解如何做一些重要的Struts2接口的實現。
4. 動作註釋
Struts 2對註解有很好的支持,你可以擺脫XML文件,並使用@action在動作類上替換。
package com.yiibai.user.action;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.ResultPath;
import com.opensymphony.xwork2.ActionSupport;
@Namespace("/User")
@ResultPath(value="/")
public class ValidateUserAction extends ActionSupport{
@Action(value="Welcome", results={
@Result(name="success",location="pages/welcome_user.jsp")
})
public String execute() {
return SUCCESS;
}
}
總結
擴展ActionSupport類,它適合在大多數情況下。