﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-园地</title><link>http://www.blogjava.net/wabn1986/</link><description /><language>zh-cn</language><lastBuildDate>Thu, 07 May 2026 06:13:52 GMT</lastBuildDate><pubDate>Thu, 07 May 2026 06:13:52 GMT</pubDate><ttl>60</ttl><item><title>webwork的验证器</title><link>http://www.blogjava.net/wabn1986/archive/2009/05/27/278209.html</link><dc:creator>Vector</dc:creator><author>Vector</author><pubDate>Wed, 27 May 2009 07:38:00 GMT</pubDate><guid>http://www.blogjava.net/wabn1986/archive/2009/05/27/278209.html</guid><wfw:comment>http://www.blogjava.net/wabn1986/comments/278209.html</wfw:comment><comments>http://www.blogjava.net/wabn1986/archive/2009/05/27/278209.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wabn1986/comments/commentRss/278209.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wabn1986/services/trackbacks/278209.html</trackback:ping><description><![CDATA[<p>webwork提供了强大的验证功能，下边一一介绍一些常用的功能的用法。<br />
一，首先webwork的validator是基于拦截器的，所以首先要配制一下拦截器，默认的拦截器，已经<br />
使用了validator，如果你想定义自己的拦截器组合，记得在你的拦截器的stack中把这句话加入<br />
&lt;interceptor-ref name="validation"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param name="excludeMethods"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; input,back,cancel,browse<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/param&gt;<br />
&lt;/interceptor-ref&gt;二、是否使用自定义Validator：在一般情况下webwork提供的Validator已经能应付大多数问题，<br />
但是如果你想自己定义，那么记得注册你的验证器(Validator)，一个简单的注册办法是<br />
添加一个文件名为 validators.xml 的文件在你的classpath (/WEB-INF/classes) 的根目录下<br />
文件中的内容类似如下：<br />
&lt;validators&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;validator name="required" class="com.opensymphony.xwork.validator.validators.RequiredFieldValidator"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;validator name="requiredstring" class="com.opensymphony.xwork.validator.validators.RequiredStringValidator"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;validator name="int" class="com.opensymphony.xwork.validator.validators.IntRangeFieldValidator"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;validator name="double" class="com.opensymphony.xwork.validator.validators.DoubleRangeFieldValidator"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;validator name="date" class="com.opensymphony.xwork.validator.validators.DateRangeFieldValidator"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;validator name="expression" class="com.opensymphony.xwork.validator.validators.ExpressionValidator"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;validator name="fieldexpression" class="com.opensymphony.xwork.validator.validators.FieldExpressionValidator"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;validator name="email" class="com.opensymphony.xwork.validator.validators.EmailValidator"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;validator name="url" class="com.opensymphony.xwork.validator.validators.URLValidator"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;validator name="visitor" class="com.opensymphony.xwork.validator.validators.VisitorFieldValidator"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;validator name="conversion" class="com.opensymphony.xwork.validator.validators.ConversionErrorFieldValidator"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;validator name="stringlength" class="com.opensymphony.xwork.validator.validators.StringLengthFieldValidator"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;validator name="regex" class="com.opensymphony.xwork.validator.validators.RegexFieldValidator"/&gt;<br />
&lt;/validators&gt;注意：<br />
1，validators.xml如果已经定义了,那么它应该在classpath中可以找到.然而如果不需要自定义的校验器,那么这不是必须的.WebWork会自动从发布包里的<br />
xwork jar文件中取得一个事先定义好的校验器集合(com/opensymphony/xwork/validator/validators/default.xml). <br />
浏览ValidatorFactory的static块来了解详细信息<br />
2，如果自定义的校验器被定义了而且创建了一个validators.xml文件并放在classpath中,<br />
记得复制所有其他你需要的预定义的校验器到validators.xml里,如果你不需要注册则不需要.<br />
一旦validators.xml在classpath里被检测到,缺省的 (com/opensymphony/xwork/validator/validators/default.xml)<br />
就不会被装载了.只有没发现自定义 validators.xml的时候才会装载.要小心.这点类似Java中的缺省构造函数<br />
三、定义校验规则<br />
&lt;!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "<a href="http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd</a>"&gt;<br />
&lt;validators&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;field name="name"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--必添--&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;field-validator type="requiredstring"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--是否使用trim--&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param name="trim"&gt;true&lt;/param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--提示的错误信息--&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;message&gt;You must enter a name&lt;/message&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/field-validator&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/field&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;field name="currDate"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;field-validator type="date"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--最小时间--&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param name="min"&gt;01/01/2007&lt;/param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--最大时间--&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param name="max"&gt;02/28/2007&lt;/param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--提示的错误信息--&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;message&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; The date must be between 01-01-2007 and 02-28-2007.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/message&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/field-validator&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/field&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;field name="url"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--short-circuit是否短路检验，类似&amp;&amp;运算的短路算法--&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;field-validator type="required" short-circuit="true"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--提示的错误信息--&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;message&gt;You must enter a value for url.&lt;/message&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/field-validator&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--webwork提供的url验证--&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;field-validator type="url" short-circuit="true"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--提示的错误信息--&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;message&gt;Not a valid url.&lt;/message&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/field-validator&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/field&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;field name="mail"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;field-validator type="required"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;message&gt;You must enter a value for 邮件.&lt;/message&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/field-validator&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--mail的验证，验证器由webwork提供--&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;field-validator type="email"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;message&gt;Not a valid 邮件.&lt;/message&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/field-validator&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/field&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;field name="age"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;field-validator type="int"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--同样的最大最小值--&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param name="min"&gt;1&lt;/param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param name="max"&gt;200&lt;/param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;message&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--注意这里，msn中可以用表达式取出值栈中的值例如${min}--&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Only people ages ${min} to ${max} may be true,otherwise<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; you are a ghost<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/message&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/field-validator&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/field&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;field name="desc"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;field-validator type="requiredstring"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param name="trim"&gt;true&lt;/param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;message&gt;You must enter a desc&lt;/message&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/field-validator&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;field-validator type="stringlength"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param name="minLength"&gt;1&lt;/param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param name="maxLength"&gt;10&lt;/param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--从属性文件中取出my.key显示，如果取不到my.key就显示<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; You must enter a desc length=10(my.key)--&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;message key="my.key"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; You must enter a desc length=10(my.key)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/message&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/field-validator&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--可以使用正则表达式--&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;field-validator type="regex"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param name="expression"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;![CDATA[([a-z][0-9][A-Z][x])]]&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--message可以由固定的字符串，值栈中的值${desc}以及通过调用方法取到的<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 属性文件中的值${getText('my.key')}--&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;message&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "regex error ${getText('my.key')} ${desc}"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/message&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/field-validator&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/field&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--上边的验证叫字段验证，下边这些验证叫普通验证，普通验证是优于字段验证的。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在使用短路的时候要小心--&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--上边那些都是基于字段的验证，这个是基于Action的验证<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果要在页面显示这些消息，需要加入&lt;ww:actionError/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;validator type="expression"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--可以基于表达式的验证name.equals(desc)--&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param name="expression"&gt;name.equals(desc)&lt;/param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;message&gt;name not the same as desc&lt;/message&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/validator&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- Plain Validator 2 --&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--可以基于表达式的验证mail.startsWith('mark')--&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;validator type="expression" short-circuit="true"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param name="expression"&gt;mail.startsWith('mark')&lt;/param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;message&gt;Email does not start with mark&lt;/message&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/validator&gt;<br />
&lt;/validators&gt;<br />
四、客户端验证<br />
加入validate="true"<br />
&lt;ww:form name="test" action="javascriptValidation" validate="true"&gt;<br />
&nbsp;&nbsp;&nbsp; ...<br />
&lt;/ww:form&gt;<br />
这样的话webwork会根据你的服务器端的验证，对应生成javaScript的验证，而且提示信息和服务器端<br />
验证的方式一样，而不是alert的方式显示。（前题是你使用的都是标准的验证器）<br />
五、<br />
对应上边验证器的web页面</p>
<p><br />
&lt;<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#37;&#64;&#112;&#97;&#103;&#101;">%@page</a> contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%&gt;<br />
&lt;%@ taglib prefix="ww" uri="/webwork"%&gt;<br />
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "<a href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd</a>"&gt;<br />
&lt;html&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;head&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;title&gt;&lt;/title&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ww:head /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/head&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;body&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果想统一的显示所有的Erro打开下边这句<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ww:fielderror /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果想显示其中一个Error打开下边这句，默认显示在字段的正上方<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ww:fielderror&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ww:param value="%{'name'}" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/ww:fielderror&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ww:fielderror&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ww:param&gt;desc&lt;/ww:param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/ww:fielderror&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ww:form name="test" namespace="/" action="DbAdmin" method="post" validate="true"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ww:actionmessage /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ww:actionerror/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ww:textfield label="name" name="name" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ww:date id="strCurrDate" name="currDate" format="yyyy-MM-dd" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ww:datepicker name="currDate" id="currDate" showstime="true"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format="%Y-%m-%e %H:%M" cssClass="tx" language="zh" required="true"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; template="datepicker.ftl" label="currDate" value="%{strCurrDate}" &gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/ww:datepicker&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ww:textfield label="url" name="url" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ww:textfield label="mail" name="mail" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ww:textfield label="age" name="age" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ww:textfield label="desc" name="desc" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ww:submit action="DbAdmin" method="doTestValidator"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; value="doTestValidator" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/ww:form&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/body&gt;<br />
&lt;/html&gt;六、对应上边的Action代码<br />
package niis.web.actions.temp;</p>
<p>import java.text.SimpleDateFormat;<br />
import java.util.Date;</p>
<p>import niis.persistence.ITestDao;<br />
import niis.persistence.dao.SqlCommand;<br />
import niis.web.actions.AbstractAction;</p>
<p>public class DbAdminAction {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private String name;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private Date currDate ;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private String url;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private String mail;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private int age;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private String desc;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public String doTestValidator(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(name);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(currDate);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(url);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(mail);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(age);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return SUCCESS;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /** *//**<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * @return the age<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public int getAge() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return age;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /** *//**<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * @param age the age to set<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void setAge(int age) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.age = age;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /** *//**<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * @return the date<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public Date getCurrDate() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return currDate;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /** *//**<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * @param date the date to set<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void setCurrDate(Date date) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.currDate = date;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /** *//**<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * @return the mail<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public String getMail() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return mail;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /** *//**<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * @param mail the mail to set<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void setMail(String mail) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.mail = mail;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /** *//**<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * @return the name<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public String getName() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return name;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /** *//**<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * @param name the name to set<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void setName(String name) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.name = name;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /** *//**<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * @return the url<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public String getUrl() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return url;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /** *//**<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * @param url the url to set<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void setUrl(String url) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.url = url;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /** *//**<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * @return the testDao<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public ITestDao getTestDao() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return testDao;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /** *//**<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * @return the desc<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public String getDesc() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return desc;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /** *//**<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * @param desc the desc to set<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void setDesc(String desc) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.desc = desc;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
}<br />
七、简单提示：属性文件的名字类名+properties，validator配制文件的名字类名+validation.xml<br />
(还有其它的组合方式)<br />
例如对应的DbAdminAction.java<br />
DbAdminAction-validation.xml<br />
DbAdminAction.properties<br />
注意<br />
许多WebWork 标签的 required 属性和客户端校验没有什么关系. 它只是在某个theme(例如xhtml)中用来在一个标识为必填的字段周围放置一个'*'.</p>
<p><br />
八、上边程序的示例代码(从eclipse导出的工程)<br />
<a href="http://www.blogjava.net/Files/dreamstone/vl.rar">http://www.blogjava.net/Files/dreamstone/vl.rar</a><br />
</p>
<img src ="http://www.blogjava.net/wabn1986/aggbug/278209.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wabn1986/" target="_blank">Vector</a> 2009-05-27 15:38 <a href="http://www.blogjava.net/wabn1986/archive/2009/05/27/278209.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>