validator-rules.xml中包括了一些驗證器與驗器規則,除了要自訂驗證器或驗證規則之外,基本上您並不需要去變更它。
如果您要進行客戶端的驗證,可以撰寫自己的ActionForm類別,並在validation.xml中定義要驗證的屬性欄位,一個範例如下:
validation.xml代碼: |
<?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE form-validation PUBLIC "-//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="userForm"> <field property="name" depends="required"> <arg0 key="logon.username.displayname"/> </field> <field property="email" depends="required,mask"> <arg0 key="logon.email.displayname"/> <var> <var-name>mask</var-name> <var-value>^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*$</var-value> </var> </field> </form> </formset> </form-validation> |
<form>的name屬性指明我們將為哪一個ActionForm作驗證,這個名稱必須在struts-config.xml中有定義,我們的userForm中包括兩個屬性name與email,<field>定義要驗證的屬性欄位,depends定義所使用的驗證器,required驗證器會檢查欄位是否填寫,如果沒有,它會使用application.properties中的訊息:
在validation.xml的設定上,您可以定義一些常量,以方便在設定過程中使用,例如定義mask的regular expression,例如:
validation.xml代碼: |
<global> <constant> <constant-name>email</constant-name> <constant-value>^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*$</constant-value> </constant> </global> <formset> <form name="userForm"> <field property="name" depends="required"> <arg0 key="logon.username.displayname"/> </field> <field property="email" depends="required,mask"> <arg0 key="logon.email.displayname"/> <var> <var-name>mask</var-name> <var-value>${email}</var-value> </var> </field> </form> <formset> |
定義常量在管理上會很方便,日後如果要改變regular expression,就只要更改常量中的設定就好了。
application.properties代碼: |
# -- validator -- errors.invalid={0} is invalid. ..... # -- display -- logon.username.displayname=Username logon.email.displayname=Email |
您可以將struts-blank中的application.properties複製過來,有 # -- validator -- 下的驗證訊息將為Validator使用,arg0 會替換 {0} 中的文字。
如果depends中指定了兩個以上的驗證器,則會依序使用,如果有一個驗證不通過,則會停止驗證並作出相關回應,mask驗證器用來驗證所輸入的欄位是否符合我們的設定格式,使用regular expression來設定驗證格式。
Validator的客戶端驗證是使用JavaScript來進行驗證,驗證規則定義在validator-rules.xml中,有興趣的話可以看看當中有關於JavaScript是如何進行驗證的,我們可以直接使用<html:javascript/>標籤來寫出所必須的JavaScript,一個例子如下:
login.jsp代碼: |
<%@ taglib uri="/tags/struts-bean" prefix="bean" %> |
staticJavascript.jsp代碼:
<%@ page language="java" %>
<%-- set document type to Javascript (addresses a bug in Netscape according to a web resource --%>
<%@ page contentType="application/x-javascript" %><%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<html:javascript dynamicJavascript="false" staticJavascript="true"/>
struts-config.xml代碼:
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>
</plug-in>