Validator客戶端驗證

validator-rules.xml中包括了一些驗證器與驗器規則,除了要自訂驗證器或驗證規則之外,基本上您並不需要去變更它。

如果您要進行客戶端的驗證,可以撰寫自己的ActionForm類別,並在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中的訊息:
# -- 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,一個例子如下:
<%@ taglib uri="/tags/struts-bean" prefix="bean" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<%@page contentType="text/html; charset=Big5"%>
<html:html>
<head>
<title><bean:message key="welcome.title"/></title>
<html:base/>
</head>
<body bgcolor="white">
<html:errors/>

<html:form action="/LoginAction" focus="name" οnsubmit="return validateUserForm(this)">
名称:<html:text property="name" size="20"/><br>
邮件:<html:text property="email" size="20"/><br>
<html:submit/> <html:reset/>
</html:form>

<html:javascript formName="userForm"/>

</body>
</html:html>


在validation.xml的設定上,您可以定义一些常量,以方便在设定過程中使用,例如定义mask的regular expression,例如:
    <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,就只要更改常量中的设定就好了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值