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