WebWork的强大的验证器

WebWork验证机制
本文介绍WebWork框架中的验证机制,包括基于拦截器的配置、自定义验证器注册、定义验证规则的方法,以及如何实现客户端验证。
webwork提供了强大的验证功能,下边一一介绍一些常用的功能的用法。
一,首先webwork的validator是基于拦截器的,所以首先要配制一下拦截器,默认的拦截器,已经
使用了validator,如果你想定义自己的拦截器组合,记得在你的拦截器的stack中把这句话加入
None.gif<interceptor-ref name="validation">
None.gif    
<param name="excludeMethods">
None.gif        input,back,cancel,browse
None.gif    
</param>
None.gif
</interceptor-ref>
二、是否使用自定义Validator:在一般情况下webwork提供的Validator已经能应付大多数问题,
但是如果你想自己定义,那么记得注册你的验证器(Validator),一个简单的注册办法是
添加一个文件名为 validators.xml 的文件在你的classpath (/WEB-INF/classes) 的根目录下
文件中的内容类似如下:
None.gif<validators>
None.gif    
<validator name="required" class="com.opensymphony.xwork.validator.validators.RequiredFieldValidator"/>
None.gif    
<validator name="requiredstring" class="com.opensymphony.xwork.validator.validators.RequiredStringValidator"/>
None.gif    
<validator name="int" class="com.opensymphony.xwork.validator.validators.IntRangeFieldValidator"/>
None.gif    
<validator name="double" class="com.opensymphony.xwork.validator.validators.DoubleRangeFieldValidator"/>
None.gif    
<validator name="date" class="com.opensymphony.xwork.validator.validators.DateRangeFieldValidator"/>
None.gif    
<validator name="expression" class="com.opensymphony.xwork.validator.validators.ExpressionValidator"/>
None.gif    
<validator name="fieldexpression" class="com.opensymphony.xwork.validator.validators.FieldExpressionValidator"/>
None.gif    
<validator name="email" class="com.opensymphony.xwork.validator.validators.EmailValidator"/>
None.gif    
<validator name="url" class="com.opensymphony.xwork.validator.validators.URLValidator"/>
None.gif    
<validator name="visitor" class="com.opensymphony.xwork.validator.validators.VisitorFieldValidator"/>
None.gif    
<validator name="conversion" class="com.opensymphony.xwork.validator.validators.ConversionErrorFieldValidator"/>
None.gif    
<validator name="stringlength" class="com.opensymphony.xwork.validator.validators.StringLengthFieldValidator"/>
None.gif    
<validator name="regex" class="com.opensymphony.xwork.validator.validators.RegexFieldValidator"/>
None.gif
</validators>
注意:
1,validators.xml如果已经定义了,那么它应该在classpath中可以找到.然而如果不需要自定义的校验器,那么这不是必须的.WebWork会自动从发布包里的
xwork jar文件中取得一个事先定义好的校验器集合(com/opensymphony/xwork/validator/validators/default.xml).
浏览ValidatorFactory的static块来了解详细信息
2,如果自定义的校验器被定义了而且创建了一个validators.xml文件并放在classpath中,
记得复制所有其他你需要的预定义的校验器到validators.xml里,如果你不需要注册则不需要.
一旦validators.xml在classpath里被检测到,缺省的 (com/opensymphony/xwork/validator/validators/default.xml)
就不会被装载了.只有没发现自定义 validators.xml的时候才会装载.要小心.这点类似Java中的缺省构造函数
None.gif三、定义校验规则
None.gif
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
None.gif       
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
None.gif
<validators>
None.gif    
<field name="name">
None.gif        
<!--必添-->
None.gif        
<field-validator type="requiredstring">
None.gif            
<!--是否使用trim-->
None.gif            
<param name="trim">true</param>
None.gif            
<!--提示的错误信息-->
None.gif            
<message>You must enter a name</message>
None.gif        
</field-validator>
None.gif    
</field>
None.gif    
<field name="currDate">
None.gif        
<field-validator type="date">
None.gif            
<!--最小时间-->
None.gif            
<param name="min">01/01/2007</param>
None.gif            
<!--最大时间-->
None.gif            
<param name="max">02/28/2007</param>
None.gif            
<!--提示的错误信息-->
None.gif            
<message>
None.gif                The date must be between 
01-01-2007 and 02-28-2007.
None.gif            
</message>
None.gif        
</field-validator>
None.gif    
</field>
None.gif    
<field name="url">
None.gif        
<!--short-circuit是否短路检验,类似&&运算的短路算法-->
None.gif        
<field-validator type="required" short-circuit="true">
None.gif            
<!--提示的错误信息-->
None.gif            
<message>You must enter a value for url.</message>
None.gif        
</field-validator>
None.gif        
<!--webwork提供的url验证-->
None.gif        
<field-validator type="url" short-circuit="true">
None.gif            
<!--提示的错误信息-->
None.gif            
<message>Not a valid url.</message>
None.gif        
</field-validator>
None.gif    
</field>
None.gif    
<field name="mail">
None.gif        
<field-validator type="required">
None.gif            
<message>You must enter a value for 邮件.</message>
None.gif        
</field-validator>
None.gif        
<!--mail的验证,验证器由webwork提供-->
None.gif        
<field-validator type="email">
None.gif            
<message>Not a valid 邮件.</message>
None.gif        
</field-validator>
None.gif    
</field>
None.gif    
<field name="age">
None.gif        
<field-validator type="int">
None.gif            
<!--同样的最大最小值-->
None.gif            
<param name="min">1</param>
None.gif            
<param name="max">200</param>
None.gif            
<message>
ExpandedBlockStart.gifContractedBlock.gif                
<!--注意这里,msn中可以用表达式取出值栈中的值例如$dot.gif{min}-->
ExpandedBlockStart.gifContractedBlock.gif                Only people ages $
dot.gif{min} to $dot.gif{max} may be true,otherwise
None.gif                you are a ghost
None.gif            
</message>
None.gif        
</field-validator>
None.gif    
</field>
None.gif    
<field name="desc">
None.gif        
<field-validator type="requiredstring">
None.gif            
<param name="trim">true</param>
None.gif            
<message>You must enter a desc</message>
None.gif        
</field-validator>
None.gif        
<field-validator type="stringlength">
None.gif            
<param name="minLength">1</param>
None.gif            
<param name="maxLength">10</param>
None.gif            
<!--从属性文件中取出my.key显示,如果取不到my.key就显示
None.gif            You must enter a desc length
=10(my.key)-->
None.gif            
<message key="my.key">
None.gif                You must enter a desc length
=10(my.key)
None.gif            
</message>
None.gif        
</field-validator>
None.gif        
<!--可以使用正则表达式-->
None.gif        
<field-validator type="regex">
None.gif            
<param name="expression">
None.gif                
<![CDATA[([a-z][0-9][A-Z][x])]]>
None.gif            
</param>
ExpandedBlockStart.gifContractedBlock.gif            
<!--message可以由固定的字符串,值栈中的值$dot.gif{desc}以及通过调用方法取到的
ExpandedBlockStart.gifContractedBlock.gif            属性文件中的值$
dot.gif{getText('my.key')}-->
None.gif            
<message>
None.gif                
"regex error ${getText('my.key')} ${desc}"
None.gif            
</message>
None.gif        
</field-validator>
None.gif    
</field>
None.gif    
<!--上边的验证叫字段验证,下边这些验证叫普通验证,普通验证是优于字段验证的。
None.gif    在使用短路的时候要小心
-->
None.gif    
<!--上边那些都是基于字段的验证,这个是基于Action的验证
None.gif    如果要在页面显示这些消息,需要加入
<ww:actionError/>
None.gif    
-->
None.gif    
<validator type="expression">
None.gif        
<!--可以基于表达式的验证name.equals(desc)-->
None.gif        
<param name="expression">name.equals(desc)</param>
None.gif        
<message>name not the same as desc</message>
None.gif    
</validator>
None.gif    
<!-- Plain Validator 2 -->
None.gif    
<!--可以基于表达式的验证mail.startsWith('mark')-->
None.gif    
<validator type="expression" short-circuit="true">
None.gif        
<param name="expression">mail.startsWith('mark')</param>
None.gif        
<message>Email does not start with mark</message>
None.gif    
</validator>
None.gif
</validators>
四、客户端验证
加入validate="true"
<ww:form name="test" action="javascriptValidation" validate="true">
  ...
</ww:form>
这样的话webwork会根据你的服务器端的验证,对应生成javaScript的验证,而且提示信息和服务器端
验证的方式一样,而不是alert的方式显示。(前题是你使用的都是标准的验证器)
五、
对应上边验证器的web页面
None.gif<%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
None.gif
<%@ taglib prefix="ww" uri="/webwork"%>
None.gif
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
None.gif
<html>
None.gif    
<head>
None.gif        
<title></title>
None.gif        
<ww:head />
None.gif    
</head>
None.gif    
<body>
None.gif        
<!--  
None.gif        如果想统一的显示所有的Erro打开下边这句
None.gif        
<ww:fielderror />
None.gif        如果想显示其中一个Error打开下边这句,默认显示在字段的正上方
None.gif        
<ww:fielderror>
None.gif            
<ww:param value="%{'name'}" />
None.gif        
</ww:fielderror>
None.gif        
<ww:fielderror>
None.gif            
<ww:param>desc</ww:param>
None.gif        
</ww:fielderror>
None.gif         
-->
None.gif        
<ww:form name="test" namespace="/" action="DbAdmin" method="post" validate="true">
None.gif            
<ww:actionmessage />
None.gif            
<ww:actionerror/>
None.gif            
<ww:textfield label="name" name="name" />
None.gif            
<ww:date id="strCurrDate" name="currDate" format="yyyy-MM-dd" />
None.gif            
<ww:datepicker name="currDate"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值