ITEEDU

Struts Gossip: 客户端验证器

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中的讯 息:
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,一个例子如下:
test.jsp
<%@ taglib uri="/tags/struts-bean" prefix="bean" %> 
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<%@page contentType="text/html; charset=Big5"%>
<html:html>
<head>
<title>Login</title>
<html:base/>
</head>
<body bgcolor="white">

<html:messages id="error">
<bean:write name="error"/>
</html:messages>

<html:form action="/login.do" focus="name"
onsubmit="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,例如:
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,就只要更改常量中的设定就好了。