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中
建立一個UserLoginAction.properties,並放置在user.action包下,並設定內容:
<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則是保存一個訊息後,繼續執行流程到結果頁。