??????
在用struts框架開發(fā)的Web應(yīng)用中,一般是一個業(yè)務(wù)操作(Action)對應(yīng)一個ActionForm,但對于同一個ActionForm一般有CURD(添加,修改,刪除,查詢)四種操作,這意味著在通常情況下一個ActionForm可能會對應(yīng)著四個Action,這樣在一個系統(tǒng)中Action的數(shù)量很大,為了減少Action的個數(shù),Struts引入了DispatchAction,對同一類業(yè)務(wù)的操作(CURD)只用了一個繼承于DispatchAction的Action。
?? 但在配置文件中mapping,validate屬性配置了對ActionForm是否進行驗證。而在一個DispatchAction中有些操作(添加,修改)需要validate,刪除和查詢不需要驗證。
???有兩種方法解決:
???1.(我以前用的方法)把配置文件中的validate屬性設(shè)為false,表示不對ActionForm進行驗證(當然在validation.xml文件還是要配置該form),對需要進行驗證的操作如添加,修改,則在其action方法中的顯示調(diào)用validate方法進行驗證。
????
public?ActionForward?add(
????????ActionMapping?mapping,
????????ActionForm?form,
????????HttpServletRequest?request,
????????? HttpServletResponse?response)?
{
????????
????????DynaValidatorForm?adminForm?=?(DynaValidatorForm)?form;
???????? //顯示進行驗證
????????ActionErrors?errors=adminForm.validate(mapping,request);
????????if(!errors.isEmpty()){
??????????? //不符合驗證規(guī)則
????????????this.saveErrors(request,errors);
????????????return?mapping.getInputForward();
????????}
????????//驗證通過,其它的操作
????????
?????????return?mapping.findForward("success");
????}????
?????? 2.
把配置文件中的validate屬性設(shè)為true,表示對ActionForm進行驗證,然后修改ActionForm里的validate方法(這種方法不適合于動態(tài)ActionForm,因其沒有validate方法)
???
????public?ActionErrors?validate(
????????????ActionMapping?mapping,

????????????HttpServletRequest?request)?
{
????????
????????????String?param?=request.getParameter("method");
????????????//若是添加或者修改操作,則進行驗證????
????????????if(param.equals("add")||param.equals("update"))
????????????????return?super.validate(mapping,request);
????????????else
????????????????return?null;//否則不驗證
????????}??? 總結(jié):兩種方法均能達到目的,但一種方法對要驗證的操作需要分別在其Action方法開始前顯式進行驗證,相比第二種方法,代碼較多,而第二種方法較為簡潔,但不能用于動態(tài)ActionForm中。
??? 注:第二種來自
http://blog.csdn.net/Arqui/archive/2004/10/12/133761.aspx