程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> JSP編程 >> 關於JSP >> struts靜態動態ActionForm使用 —驗證

struts靜態動態ActionForm使用 —驗證

編輯:關於JSP

 第一種:重寫ActionForm的validate方法。        在actionForm中需要驗證的都是表單的驗證而非業務的驗證。比如用戶名非空,密碼為數字,日期為時間格式等等。在validate方法中,返回ActionErrors信息,然後在錯誤頁打印錯誤信息。     [html]   public ActionErrors validate(ActionMapping mapping,           HttpServletRequest request) {        ActionErrors errors=new ActionErrors();     if(username==null||"".equals(username)){        errors.add(username, new ActionMessage("error.username",username));     }     if(password==null || "".equals(password)){         errors.add("password",new ActionMessage("error.password",password));     }     if(!(birthday instanceof Date)){         errors.add("birthday",new ActionMessage("error.birthday",birthday));     }        return errors;   }     public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {    ActionErrors errors=new ActionErrors();  if(username==null||"".equals(username)){ errors.add(username, new ActionMessage("error.username",username));  }  if(password==null || "".equals(password)){  errors.add("password",new ActionMessage("error.password",password));  }  if(!(birthday instanceof Date)){  errors.add("birthday",new ActionMessage("error.birthday",birthday));  }    return errors; }                代碼解釋:       使用這種ActionForm再帶的驗證方式,在配置文件中需要設置此action的validate屬性為true,並且也要設置出現錯誤返回的錯誤頁input屬性。       struts-config.xml中action的配置如下:  [html]  <action-mappings>       <action path="/login" type="com.login.LoginAction" name="loginForm"           scope="request" input="/login/error.jsp" validate="true">           <forward name="success" path="/login/success.jsp"></forward>           <forward name="false" path="/login/false.jsp"></forward>       </action>   </action-mappings>     <action-mappings> <action path="/login" type="com.login.LoginAction" name="loginForm" scope="request" input="/login/error.jsp" validate="true"> <forward name="success" path="/login/success.jsp"></forward> <forward name="false" path="/login/false.jsp"></forward> </action> </action-mappings>      其中為了把錯誤顯示出來,我們使用資源文件方式。      在validate方法中,new ActionMessage("error.birthday",birthday)中的"error.birthday"是資源文件的key值。      配置文件中加載資源文件:   [html]  <!--     加載資源文件 -->       <message-resources parameter="MessageResources" />     <!-- 加載資源文件 -->     <message-resources parameter="MessageResources" />     注意資源文件放在src下。若是放在WebContent目錄或web-inf下,則不會提示相應的錯誤信息。即使不報錯。      並且上述的日期,其中使用Register注冊了,上篇博客已經介紹,在此不再過多介紹。      這個action自帶的驗證的demo已經上傳。點我下載。            第二種:使用validator框架。      其中validate驗證,主要是由commons-validator.jar包。      那如何使用validator框架呢?      1.actionForm使用validator框架。        首先:編寫actionForm        注意此時的actionForm不是繼承ActionForm,而是繼承ValidatorForm。        其中actionform中只有getset方法        其次:編寫配置文件struts-config.xml中,加載驗證插件以及使用資源文件。      [html]   <!--     加載資源文件 -->       <message-resources parameter="MessageResources" />   <!--     驗證插件 -->     <plug-in className="org.apache.struts.validator.ValidatorPlugIn">       <set-property           property="pathnames"           value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>     </plug-in>     <!-- 加載資源文件 -->     <message-resources parameter="MessageResources" /> <!--     驗證插件 -->   <plug-in className="org.apache.struts.validator.ValidatorPlugIn">     <set-property         property="pathnames"         value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>   </plug-in>       其中,validator-rules.xml是公共的。而這個validation.xml是需要程序員編寫。       然後:編寫validation.xml驗證信息。    [html]  <?xml version="1.0" encoding="UTF-8" ?>      <!DOCTYPE form-validation PUBLIC             "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1.3//EN"             "http://jakarta.apache.org/commons/dtds/validator_1_1_3.dtd">      <form-validation>       <formset>   <!--        form 的name必須與struts-config中名稱一致 -->           <form name="loginForm">               <field property="username"  depends="required">                      <!-- key值必須與資源文件中名稱一致 -->                       <arg key="error.username"/>               </field>                      <field property="password" depends="required">                       <arg key="error.password"/>               </field>                              <field property="birthday" depends="date">                    <arg key="error.birthday"/>               </field>              </form>       </formset>   </form-validation>     <?xml version="1.0" encoding="UTF-8" ?>   <!DOCTYPE form-validation PUBLIC           "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1.3//EN"           "http://jakarta.apache.org/commons/dtds/validator_1_1_3.dtd">   <form-validation>     <formset> <!--        form 的name必須與struts-config中名稱一致 -->         <form name="loginForm">             <field property="username"  depends="required">                    <!-- key值必須與資源文件中名稱一致 -->                     <arg key="error.username"/>             </field>                  <field property="password" depends="required">                     <arg key="error.password"/>             </field>                          <field property="birthday" depends="date">                  <arg key="error.birthday"/>             </field>            </form>     </formset> </form-validation>     formset可以包含多個form,並且form中需要驗證的屬性使用field標簽。其中depends依賴驗證規則的中的信息validator-rules.xml中的規則。比如:required,要求必填,date,日期格式,long,byte,mask正則等等。      其中的key值必須與資源文件的key一致。如第一種方法。     2.動態actionform使用validator框架。      動態的actionform在上篇博客已經介紹。在1的基礎上,只改一下struts-config.xml配置文件中的動態actionform  [html]   <!--     動態驗證form -->       <form-beans>         <form-bean name="loginForm" type="org.apache.struts.validator.DynaValidatorForm">           <form-property name="username" type="java.lang.String"></form-property>           <form-property name="password" type="java.lang.String"></form-property>           <form-property name="birthday" type="java.util.Date"></form-property>                  </form-bean>       </form-beans>     <!-- 動態驗證form -->     <form-beans>       <form-bean name="loginForm" type="org.apache.struts.validator.DynaValidatorForm">         <form-property name="username" type="java.lang.String"></form-property>         <form-property name="password" type="java.lang.String"></form-property>         <form-property name="birthday" type="java.util.Date"></form-property>              </form-bean>     </form-beans>      其他的不用改變。       但是需要注意的是:使用validator框架的動態actionform的type類型是:DynaValidatorForm而不是DynaActionForm     3.應用在客戶端,使用js提示。       在1的基礎上只改一個login.jsp其他的不用改。       添加onsumit,並且添加個html:javascript標簽      [html]  <html:javascript formName="loginForm"/>    <html:form action="login.do" onsubmit="return validateLoginForm(this)">         username : <html:text property="username"/><br/>         password : <html:password property="password"/><br>         birthday: <html:text property="birthday"></html:text>      <html:submit/>  www.2cto.com   </html:form>     <html:javascript formName="loginForm"/>  <html:form action="login.do" onsubmit="return validateLoginForm(this)">    username : <html:text property="username"/><br/>    password : <html:password property="password"/><br>    birthday: <html:text property="birthday"></html:text>    <html:submit/>   </html:form>    需要注意的是:其中action不能使用"../",否則提示錯誤。     並且並不是所有的服務器校驗都可以轉化成客戶端的js提示,其中日期的合法性驗證,就不能轉化成客戶端js提示。      

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved