最近一直都研究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類:
- package cn.onlysoft.bookmark.form;
- import javax.servlet.http.HttpServletRequest;
- import org.apache.struts.action.ActionErrors;
- import org.apache.struts.action.ActionMapping;
- import org.apache.struts.validator.ValidatorForm;
- public class LoginForm extends ValidatorForm {
- private String password;
- private String username;
- public String getPassword() {
- return password;
- }
- public void setPassword(String password) {
- this.password = password;
- }
- public String getUsername() {
- return username;
- }
- public void setUsername(String username) {
- this.username = username;
- }
- public ActionErrors validate(ActionMapping mapping,HttpServletRequest request){
- return null;
- }
- }
以下是繼承Action類的LoginAction類,用於處理業務邏輯:
java 代碼
- /*
- * Generated by MyEclipse Struts
- * Template path: templates/java/JavaClass.vtl
- */
- package cn.onlysoft.bookmark.action;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import org.apache.struts.action.Action;
- import org.apache.struts.action.ActionForm;
- import org.apache.struts.action.ActionForward;
- import org.apache.struts.action.ActionMapping;
- import cn.onlysoft.bookmark.form.LoginForm;
- public class LoginAction extends Action {
- public ActionForward execute(ActionMapping mapping, ActionForm form,
- HttpServletRequest request, HttpServletResponse response) {
- LoginForm LoginForm = (LoginForm) form;
- return mapping.findForward("toLogin");
- }
- }
以下是struts-confit.xml文件中的部分配置:
xml 代碼
- <form-beans >
- <form-bean name="LoginForm" type="cn.onlysoft.bookmark.form.LoginForm" />
- form-beans>
- <action-mappings >
- <action forward="/WEB-INF/jsp/index.jsp" path="/index" />
- <action
- attribute="LoginForm"
- input="/WEB-INF/jsp/login.jsp"
- name="LoginForm"
- path="/Login"
- scope="request"
- type="cn.onlysoft.bookmark.action.LoginAction">
- <forward name="toLogin" path="/WEB-INF/jsp/login.jsp" />
- <forward
- name="manage"
- path="/index.do"
- redirect="true" />
- action>
- action-mappings>
- <message-resources parameter="cn.onlysoft.bookmark.BookmarkResources" />
- <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
- <set-property property="stopOnFirstError" value="true" />
- <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml" />
- plug-in>
以下是BookmarkResources.properties文件中的國際化資源配置:
LoginForm.username=username
LoginForm.password=password
errors.header=error message is:
errors.required={0}must not null以下是validation.xml文件中的全部配置:
xml 代碼
- xml version="1.0" encoding="gbk"?>
- "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.0//EN"
- "http://jakarta.apache.org/commons/dtds/validator_1_0.dtd">
- <form-validation>
- <formset>
- <form name="LoginForm">
- <field property="username" depends="required,mask">
- <arg0 key="LoginForm.username"/>
- <msg key="errors.required" name="required"/>
- <var>
- <var-name>markvar-name>
- <var-value>^[a-zA-Z]+$var-value>
- var>
- field>
- <field property="password" depends="required">
- <arg0 key="LoginForm.password"/>
- field>
- form>
- formset>
- 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>
關於使用commons-validator.jar的校驗問題
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.