用過(guò)struts都清楚,struts的開(kāi)發(fā)一般要寫兩個(gè)類,F(xiàn)ormBean和Action類,通常情況下Action是這樣的:
public class XXXAction extends Action {
這是一個(gè)Action最少的代碼了,它沒(méi)有處理任何邏輯,只是一個(gè)跳轉(zhuǎn),F(xiàn)ormBean的話,只要繼承ActionForm,代碼到?jīng)]有規(guī)定,到時(shí),我們可能會(huì)想,每個(gè)Action里面都必須寫上面那些代碼,煩啊,還有在每個(gè)FormBean里我們一般都會(huì)定義一些常用的屬性,如event,根據(jù)event的值,我們來(lái)決定一些邏輯的處理及頁(yè)面的跳轉(zhuǎn),每次要寫,也煩啊。public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { XXXXForm theform =(XXXXForm) form;//form的強(qiáng)制轉(zhuǎn)型 //這里就是你要處理的業(yè)務(wù)邏輯了 return mapping.findForward("XXXX"); } 好,煩的話,那我們要開(kāi)始做點(diǎn)事情了,首先,寫一個(gè)formBean代碼如下: public class XXXForm extends ActionForm{
我想這誰(shuí)都應(yīng)該清楚,然后我們?cè)賹慺rombean時(shí),就不要extends ActionForm,而是extends XXXForm了,這樣,我們省了些代碼,我們?cè)賮?lái)看Action,也這樣試試:
private String event;//事件名 public String getEvent() { return event; } public void setEvent(String event) { this.event = event; } } public abstract class XXXAction extends Action {
這樣的話,我們?cè)賹慉ction類時(shí),就不extends Action而是extends XXXAction,代碼就像:
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { XXXForm theform =(XXXForm) form; return mapping.findForward(doAction(theform)); } /** *//** * 處理一些業(yè)務(wù) * @param form * @return 返回mapping指向的字符串 */ public abstract String doAction(BaseForm form);//抽象 } public class ***Action extends XXXAction {
public String doAction(XXXForm form) { ***Form theform = (***Form) form;//強(qiáng)制轉(zhuǎn)成你真正的formbean //這里就是你要處理的業(yè)務(wù)邏輯了 return "success"; } } 就是以上一些代碼,簡(jiǎn)單多了吧,return一個(gè)字符串就行了,感覺(jué)還有點(diǎn)像webwork了,到此完了嗎,有沒(méi) 有什么還沒(méi)有做呢,對(duì)了,這樣的話,我們定義的Action都成無(wú)會(huì)話的bean了,所以request是要得到的 ,很多情況下的url是***action.do?id=cctv,而且一般是系統(tǒng)都是把用戶的信息放入session中的,所以 request是強(qiáng)烈要求要還給我們的,好,那我們來(lái)重構(gòu)下formbean和action吧,以下我們用BaseForm,及 BaseAction來(lái)定義,兩個(gè)類都放在同一個(gè)包中 public class BaseForm extends ActionForm{
BaseAction代碼:private String event; private HttpServletRequest request; /** *//** * 注:這個(gè)是得到用戶信息,這個(gè)只是一個(gè)例子,也可不實(shí)現(xiàn),由request得到session,再得到 user, * 但reguser字符串對(duì)一般開(kāi)發(fā)人員可能是不可見(jiàn)的 */ public User getUser() { return (User) getRequest().getSession().getAttribute("reguser"); } public HttpServletRequest getRequest() { return request; } /** *//** * 注:這里用的protected,這樣可以就同一包的類可調(diào)用,其它類是不可見(jiàn)的 */ protected void setRequest(HttpServletRequest request) { this.request = request; } public String getEvent() { return event; } public void setEvent(String event) { this.event = event; } } public abstract class BaseAction extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { BaseForm theform =(BaseForm) form; theform.setRequest(request);//加了這句 return mapping.findForward(doAction(theform)); } /** *//** * 處理一些業(yè)務(wù) * @param form * @return 返回mapping指向的字符串 */ public abstract String doAction(BaseForm form); } 到此算為結(jié)束,可能有為會(huì)問(wèn),那還有response呢,response的話,一般出現(xiàn)在內(nèi)部跳轉(zhuǎn)等情況,感覺(jué)用 的比較少,所以在此就不把它給大家了,如覺(jué)得一定要得到的話,那就跟request一樣進(jìn)行設(shè)置吧,不過(guò) 萬(wàn)事都應(yīng)該有個(gè)度,自己衡量。 |
|
來(lái)自: Godhead > 《我的圖書(shū)館》