2025-02-09

Validator(驗證器)框架是一個 Struts 插件,它支持采用聲明式的方式對表單進行校驗,而不需要用戶編寫一行Java代碼。

一.使用 Validator 框架的好處:

更好的可維護性
校驗實現標準化
正確的實現
更少的代碼重復
自動客戶端驗證

註:解壓Struts的例子struts-cookbook-1.3.8,部署到web服務器中,查看例子體驗。

在工程中集成validate框架,你需要查看org.apache.struts.validator包下的validator-rules.xml文件,它是validate框架的校驗規則文件,這個文件說明瞭如何在struts工程中集成validate框架

二.集成步驟:

1、在struts-config.xml文件中配置validate插件。

2、創建資源文件,並復制validate框架工作需要的信息。

3、把struts-cookbook-1.3.8例程自帶的、validate框架的配置文件validation.xml,復制到當前web工程的WEB-INF目錄下。validate框架環境搭建好後,就可以采用配置的方式對formbean的屬性進行校驗,但需要註意:

    1、formbean要想使用validate框架校驗,不能直接繼承 ActionForm, 而要繼承其子類 ValidatorForm。

    2、如果是DynaActionForm,就必須要繼承DynaValidatorForm

三.validator-rules.xml校驗規則文件

……
<form-validation>
   <global>
       <!– 校驗器指定名稱 –>
       <validator name="required"
             <!– 校驗器使用的類 –>
              classname="org.apache.struts.validator.FieldChecks"
               <!– 使用該校驗器時,調用校驗器的什麼方法 –>
               method="validateRequired"
               methodParams="java.lang.Object,
                                          org.apache.commons.validator.ValidatorAction,
                                          org.apache.commons.validator.Field,
                                          org.apache.struts.action.ActionMessages,
                                          org.apache.commons.validator.Validator,
                                          javax.servlet.http.HttpServletRequest"
              <!–  校驗失敗的錯誤提示信息,此信息為關鍵字,其值從資源文件中獲取。 –>
              msg="errors.required"/>
      ……
   </global>
<form-validation>

四.Validation.xml文件詳解:

<form>元素:為表單配置驗證規則,它的 name 屬性指定瞭表單的名字.<form>元素可以包含一個或多個<field>子元素
<field>元素:配置表單中字段的驗證規則
property:指定 ActionForm Bean 中需要進行驗證的字段的名字
depends:指定字段的驗證規則,多個驗證規則之間以逗號隔開
<msg>元素:指定驗證規則對應的消息文本。該消息文本將替代在 validator-rules.xml 文件中為驗證規則配置的默認的消息文本
name:指定驗證規則的名字
key:當 resource 為 true 時,該屬性指定消息 key,該消息 key 應該在 Resource Bundle 中存在,當 resource為 false 時,該屬性直接指定消息文本
resource:當該屬性為true時,表明使用來自於 Resource Bundle 的消息;如果為 false,表明 直接在 key 屬性中設置消息文本,默認為 true
arg 元素:替換符合消息中的參數
name,key,resource 元素同上
position 元素:指定替換符合消息中的參數的位置
var 元素:向驗證規則傳遞參數
<arg> 元素也可以訪問<var>元素,語法為${var:var-name}


 

五.完整示例代碼:

其功能實現是:對用戶名進行校驗非空,並且不能小於3位,不能大於6位,對郵箱標準校驗

進行瀏覽器客戶端驗證

註意:<html:javascript>的formName指定表單的名稱。onsubmit事件的值也必須為return validate表單名(this):

view plaincopy to clipboardprint?<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 
<%@page import="org.apache.struts.action.ActionErrors"%> 
<%@page import="org.apache.struts.action.ActionMessage"%> 
<%@taglib uri="http://struts.apache.org/tags-html" prefix="html" %> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html> 
  <head> 
    <title>My JSP 'register.jsp' starting page</title> 
  </head> 
  <body> 
    <!– 指定表單的名稱 –> 
    <html:javascript formName="registerForm"/> 
    <html:form action="/register" onsubmit="return validateRegisterForm(this)"> 
        用戶名:<input type="text" name="username"><br/> 
        密碼:<input type="password" name="password"><br/> 
        確認密碼:<input type="password" name="password2"><br/> 
        郵箱:<input type="text" name="email"><br/> 
        <input type="submit" value="註冊"> 
   </html:form> 
  </body> 
</html> 
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@page import="org.apache.struts.action.ActionErrors"%>
<%@page import="org.apache.struts.action.ActionMessage"%>
<%@taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>My JSP 'register.jsp' starting page</title>
  </head>
  <body>
    <!– 指定表單的名稱 –>
    <html:javascript formName="registerForm"/>
   <html:form action="/register" onsubmit="return validateRegisterForm(this)">
     用戶名:<input type="text" name="username"><br/>
     密碼:<input type="password" name="password"><br/>
     確認密碼:<input type="password" name="password2"><br/>
     郵箱:<input type="text" name="email"><br/>
     <input type="submit" value="註冊">
   </html:form>
  </body>
</html>
 

validation.xml:

view plaincopy to clipboardprint?<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE form-validation PUBLIC 
         "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.3.0//EN" 
         "http://jakarta.apache.org/commons/dtds/validator_1_3_0.dtd"> 
<form-validation> 
    <formset> 
        <!– 校驗哪個formBean的表單 –> 
        <form name="registerForm"> 
            <!– 對哪個字段進行校驗,depends指定校驗器,required代表非空,後,最小值,最大值 –> 
            <field property="username" depends="required,minlength,maxlength"> 
                <!– resource="false"表示不用進行配置 –> 
                <arg key="用戶名" resource="false"/> 
                <arg key="${var:minlength}" name="minlength" position="1" resource="false"/> 
                <arg key="${var:maxlength}" name="maxlength" position="1" resource="false"/> 
                <var> 
                    <var-name>minlength</var-name> 
                    <var-value>3</var-value> 
                </var> 
                <var> 
                    <var-name>maxlength</var-name> 
                    <var-value>6</var-value> 
                </var> 
            </field> 
             <!– 使用正則表達式進行校驗 –> 
             <field property="username" depends="required,mask"> 
                <arg key="用戶名" resource="false"/> 
                <var> 
                    <var-name>mask</var-name> 
                    <var-value>[A-Za-z]{3,6}</var-value> 
                </var> 
            </field> 
             <!– 郵箱校驗 –> 
            <field property="email" depends="required,email"> 
                <arg key="郵箱" resource="false"/> 
            </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.3.0//EN"
         "http://jakarta.apache.org/commons/dtds/validator_1_3_0.dtd">
<form-validation>
 <formset>
     <!– 校驗哪個formBean的表單 –>
  <form name="registerForm">
      <!– 對哪個字段進行校驗,depends指定校驗器,required代表非空,後,最小值,最大值 –>
   <field property="username" depends="required,minlength,maxlength">
       <!– resource="false"表示不用進行配置 –>
    <arg key="用戶名" resource="false"/>
    <arg key="${var:minlength}" name="minlength" position="1" resource="false"/>
    <arg key="${var:maxlength}" name="maxlength" position="1" resource="false"/>
    <var>
     <var-name>minlength</var-name>
     <var-value>3</var-value>
    </var>
    <var>
     <var-name>maxlength</var-name>
     <var-value>6</var-value>
    </var>
   </field>
    <!– 使用正則表達式進行校驗 –>
    <field property="username" depends="required,mask">
    <arg key="用戶名" resource="false"/>
    <var>
     <var-name>mask</var-name>
     <var-value>[A-Za-z]{3,6}</var-value>
    </var>
   </field>
    <!– 郵箱校驗 –>
   <field property="email" depends="required,email">
    <arg key="郵箱" resource="false"/>
   </field>
  </form>
 </formset>
</form-validation>
 

struts-config.xml中集成Validate :

view plaincopy to clipboardprint?<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE struts-config PUBLIC 
          "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN" 
          "http://struts.apache.org/dtds/struts-config_1_3.dtd"> 
<struts-config> 
    <!–如果要使用動態的Bean要使用org.apache.struts.validator.DynaValidatorFor –> 
    <form-beans> 
        <form-bean name="registerForm" 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="password2" type="java.lang.String"></form-property> 
            <form-property name="email" type="java.lang.String"></form-property> 
        </form-bean> 
    </form-beans> 
    <action-mappings> 
        <action path="/register"  
                type="cn.itcast.web.action.RegisterAction" 
                name="registerForm" 
                scope="request" 
                input="/register.jsp"> 
        </action> 
    </action-mappings> 
    <controller processorClass="org.apache.struts.action.RequestProcessor"></controller> 
    <message-resources parameter="MessageResource"></message-resources> 
    <!– 集成Validate框架 –> 
    <plug-in className="org.apache.struts.validator.ValidatorPlugIn"> 
        <set-property property="pathnames"  
                      value="/org/apache/struts/validator/validator-rules.xml, 
                             /WEB-INF/validation.xml"/> 
    </plug-in> 
</struts-config> 
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts-config PUBLIC
          "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
          "http://struts.apache.org/dtds/struts-config_1_3.dtd">
<struts-config>
 <!–如果要使用動態的Bean要使用org.apache.struts.validator.DynaValidatorFor –>
 <form-beans>
  <form-bean name="registerForm" 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="password2" type="java.lang.String"></form-property>
   <form-property name="email" type="java.lang.String"></form-property>
  </form-bean>
 </form-beans>
 <action-mappings>
  <action path="/register"
    type="cn.itcast.web.action.RegisterAction"
    name="registerForm"
    scope="request"
    input="/register.jsp">
  </action>
 </action-mappings>
 <controller processorClass="org.apache.struts.action.RequestProcessor"></controller>
 <message-resources parameter="MessageResource"></message-resources>
 <!– 集成Validate框架 –>
 <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
        <set-property property="pathnames"
                      value="/org/apache/struts/validator/validator-rules.xml,
                             /WEB-INF/validation.xml"/>
    </plug-in>
</struts-config>

 


 作者“傅榮康”

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *