關於使用commons-validator.jar的校驗問題

最近一直都研究struts中的commons-validator.jar的表單驗證。但我是從ActionForm中的代碼修改轉換成使用validation.xml驗證方式的。。可是轉換過程中確出現了一個問題,就是表單沒有進行驗證和不出現驗證出錯信息。

我的數據庫裏面只有2個表:

bm_user(id,uname,password)

bm_bookmark(id,mark_name,mark_url,mark_desc,user_id)

以下是轉換ValidatorForm後的LoginForm類:

  1. package cn.onlysoft.bookmark.form;      
  2.      
  3. import javax.servlet.http.HttpServletRequest;      
  4. import org.apache.struts.action.ActionErrors;      
  5. import org.apache.struts.action.ActionMapping;      
  6. import org.apache.struts.validator.ValidatorForm;      
  7.      
  8. public class LoginForm extends ValidatorForm {      
  9.      
  10.     private String password;      
  11.      
  12.     private String username;      
  13.      
  14.     public String getPassword() {      
  15.         return password;      
  16.     }      
  17.      
  18.     public void setPassword(String password) {      
  19.         this.password = password;      
  20.     }      
  21.      
  22.     public String getUsername() {      
  23.         return username;      
  24.     }      
  25.      
  26.     public void setUsername(String username) {      
  27.         this.username = username;      
  28.     }   
  29.   
  30.     public ActionErrors validate(ActionMapping mapping,HttpServletRequest request){   
  31.         return null;   
  32.    }   
  33. }    

 

以下是繼承Action類的LoginAction類,用於處理業務邏輯:

java 代碼
  1. /*  
  2.  * Generated by MyEclipse Struts  
  3.  * Template path: templates/java/JavaClass.vtl  
  4.  */  
  5. package cn.onlysoft.bookmark.action;   
  6.   
  7. import javax.servlet.http.HttpServletRequest;   
  8. import javax.servlet.http.HttpServletResponse;   
  9. import org.apache.struts.action.Action;   
  10. import org.apache.struts.action.ActionForm;   
  11. import org.apache.struts.action.ActionForward;   
  12. import org.apache.struts.action.ActionMapping;   
  13.   
  14. import cn.onlysoft.bookmark.form.LoginForm;   
  15.   
  16. public class LoginAction extends Action {   
  17.   
  18.     public ActionForward execute(ActionMapping mapping, ActionForm form,   
  19.             HttpServletRequest request, HttpServletResponse response) {   
  20.         LoginForm LoginForm = (LoginForm) form;   
  21.         return mapping.findForward("toLogin");   
  22.     }   
  23. }  

 

以下是struts-confit.xml文件中的部分配置:

xml 代碼
  1. <form-beans >  
  2.     <form-bean name="LoginForm" type="cn.onlysoft.bookmark.form.LoginForm" />  
  3.   
  4.   form-beans>  
  5.   
  6. <action-mappings >  
  7.     <action forward="/WEB-INF/jsp/index.jsp" path="/index" />  
  8.     <action  
  9.       attribute="LoginForm"  
  10.       input="/WEB-INF/jsp/login.jsp"  
  11.       name="LoginForm"  
  12.       path="/Login"  
  13.       scope="request"  
  14.       type="cn.onlysoft.bookmark.action.LoginAction">  
  15.       <forward name="toLogin" path="/WEB-INF/jsp/login.jsp" />  
  16.       <forward  
  17.         name="manage"  
  18.         path="/index.do"  
  19.         redirect="true" />  
  20.     action>  
  21.   action-mappings>  
  22. <message-resources parameter="cn.onlysoft.bookmark.BookmarkResources" />  
  23.   <plug-in className="org.apache.struts.validator.ValidatorPlugIn">  
  24.     <set-property property="stopOnFirstError" value="true" />  
  25.     <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml" />  
  26.   plug-in>  

 

以下是BookmarkResources.properties文件中的國際化資源配置:

LoginForm.username=username
LoginForm.password=password
errors.header=error message is:
errors.required={0}must not null

以下是validation.xml文件中的全部配置:

xml 代碼
  1. xml version="1.0" encoding="gbk"?>  
  2.           "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.0//EN"   
  3.           "http://jakarta.apache.org/commons/dtds/validator_1_0.dtd">  
  4. <form-validation>  
  5.     <formset>  
  6.         <form name="LoginForm">  
  7.             <field property="username" depends="required,mask">  
  8.                 <arg0 key="LoginForm.username"/>  
  9.                 <msg key="errors.required" name="required"/>  
  10.                 <var>  
  11.                     <var-name>markvar-name>  
  12.                     <var-value>^[a-zA-Z]+$var-value>  
  13.                 var>  
  14.             field>  
  15.             <field property="password" depends="required">  
  16.                 <arg0 key="LoginForm.password"/>  
  17.             field>  
  18.         form>  
  19.     formset>  
  20. form-validation>  

 

以下是login.jsp中的部分struts標籤代碼:

<html:form action="/Login"> <!--
<html:form action="/Login" >
   用戶 : <html:text property="username"/><br/>
   密碼: <html:text property="password"/><br/>
   <html:submit>提交</html:submit> <html:cancel>取消</html:cancel>
</html:form>
<html:errors/>-->
</html:form>
<html:form action="/Login">
</html:form>

從以上的代碼配置來看,是沒什麼問題的,例如login.jsp、validation.xml、struts-config.xml都沒問題,搞了半天,還是搞不出爲什麼無法實現表單的驗證,就是將用戶和密碼的必填驗證,而且還不輸入驗證失敗的錯誤。

後來想了一下,記得書上說過有一個問題就是,如果使用這種commons-validator.jar驗證的話,form-bean的類裏面,不需要覆蓋父類中的validate方法,而我卻在LoginForm裏面覆蓋了validate這個方法,並且返回null值,也就是說驗證通過或者不需要驗證,因此,validation.xml裏面的驗證也就沒效。

唉,搞了半天原來是這個錯誤。。

希望struts初學者要謹記這種錯誤的存在!!

<html:errors> </html:errors>
發佈了5 篇原創文章 · 獲贊 0 · 訪問量 4759
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章