Struts 2動作不強迫你實現任何介面或擴充套件類,它只是需要你實現一個 execute()方法返回一個字串來表示其應該返回的結果頁面。
package com.yiibai.user.action; public class LoginAction{ //business logic public String execute() { return "success"; } }
在struts.xml中,組態使用Action類動作(action)標記和類屬性。定義結果頁面用結果的標籤和動作名稱返回給使用者,可以用它來存取動作類的名稱屬性。
<package name="user" namespace="/User" extends="struts-default"> <action name="validateUser" class="com.yiibai.user.action.LoginAction"> <result name="success">pages/welcome.jsp</result> </action> <package>
http://localhost:8080/Struts2Example/User/validateUser.action
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; } }
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")); } } }
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; } }