2013年4月6日 星期六

struts2 - Chapter 3 Action、ActionSupport、validate


Strut2其中一個重要的環節就是Action,首先我們來看Action介面:
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;
}

除了定義五個常用的String外,還有一個execute()方法。

這是作為之後繼承Action的預設方法,像上個範例的method="login"如果沒有這行的話,預設就是呼叫execute,回傳SUCCESS,而<result>如果沒有宣告name的話,預定也是接收"success",接下來我們看最常用的ActionSupport


public class ActionSupport implements Action, Validateable, ValidationAware, TextProvider, LocaleProvider, Serializable

除了實作Action外,還有常用的驗證、錯誤消息等等,ActionSupport實現了validate()方法,我們可以將想驗證的邏輯覆寫validate(),在UserLoginAction覆寫validate()如下:

@Override
 public void validate() {
  if(getAccount().length()==0){
   addFieldError("account", "請輸入account");
  }
  if(getPassword().length()==0){
   addFieldError("password","請輸入password");
  }
 }


    當有驗證到錯誤發生時,會預設傳回return INPUT,接著我們在剛剛的index.jsp中將account和password不輸入值後送出,會得到以下畫面:




    會根據在struts.xml中
<result name="input">/index.jsp</result>
跳回index.jsp,以上簡單的驗證就完成了,當然,除了把錯誤訊息放在code中,我們也可以放在一個屬性文件.properties中,以便日後的維護和管理方便。
建立一個UserLoginAction.properties,並放置在user.action包下,並設定內容:

account.required=請輸入account
password.required=請輸入password

並將
addFieldError("account", "請輸入account");
修改成
addFieldError("account", getText("account.required"));
就能讀取到了。
若是你使用eclipse,可以去下載一個插件Properties Editor,這樣就可以在eclipse編輯properties時使用中文訊息。
除了addFieldError外還有addActionError()和addActioMessage(),你可以在validate()中加入這兩個方法,並在頁面上使用<s:actionerror/>和<s:actionmessage/>這兩個方法的參數都只有一個String,你可以輸入你要顯示的訊息或者是讀取properties,若是你使用ActionError,就會如同FieldError一樣回傳input,而ActionMessage則是保存一個訊息後,繼續執行流程到結果頁。

沒有留言:

張貼留言