Action類的工作機制
Action類的工作機制
所有的Action類是org.apache.struts.action.Action的子類。Action子類應該覆蓋父類的execute方法。當ActionForm Bean被創建,并且表單驗證順利通過后,Struts框架就會調用Action類的execute()方法。execute()方法如下定義:
public ActionForward execute(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)throws IOException,ServletException
execute()方法包含以下參數:
ActionMapping:包含了這個Action的配置信息,和struts-config.xml文件中的<action>元素對應。
ActionForm:包含了用戶的表單數據,當Struts框架調用execute()方法時,ActionForm中的數據已經通過了表單驗證。
HttpServletRequest:當前的HTTP請求對象。
HttpServletResponse:當前的HTTP響應對象。
訪問封裝在MessageResources中的本地化文本
Action類的execute()方法首先獲得MessageResources對象:
MessageResources messages=getResources(request);
在Action類中定義了getResources(HttpServletRequest request)方法,該方法返回當前默認的MessageResources對象,它封裝了Resource Bundle中的文本內容。接下來Action類就可以通過MessageResources對象來訪問文本內容。例如,如果要讀取消息KEY為“hello.jsp.title”對應的文本內容,可以調用MessageResources類的getMessage(String key)方法:
String title=messages.getMessage("hello.jsp.title");
業務邏輯驗證
ActionMessages errors=new ActionMessages();
String userName=(String)((HelloForm)form).getUserName();
String badUserName="Monster";
if(userName.equalsIgnoreCase(badUserName))
{
errors.add("username",new ActionMessage("hello.dont.talk.to.monster",badUserName));
saveErrors(request,errors);
return(new ActionForward(mapping.getInput()));
}
如果用戶輸入的姓名“Monster”,將創建包含錯誤信息的ActionMessage對象,ActionMessage對象被保存島ActionMessages對象中。接下來調用在Action基類中定義的saveErrors()方法,它負責把ActionMessages對象保存島request范圍內。最后返回ActionForward對象,Struts框架會根據ActionForward對象包含的轉發信息把請求轉發島恰當的視圖組件,視圖組件通過<html:errors>標簽把request范圍內的ActionMessage對象中包含的錯誤消息顯示出來,提示用戶修改錯誤。