webwork提供了强大的验证功能,下边一一介绍一些常用的功能的用法。
一,首先webwork的validator是基于拦截器的,所以首先要配制一下拦截器,默认的拦截器,已经
使用了validator,如果你想定义自己的拦截器组合,记得在你的拦截器的stack中把这句话加入

<interceptor-ref name="validation">

<param name="excludemethods">

input,back,cancel,browse

</param>

</interceptor-ref>
二、是否使用自定义validator:在一般情况下webwork提供的validator已经能应付大多数问题,
但是如果你想自己定义,那么记得注册你的验证器(validator),一个简单的注册办法是
添加一个文件名为 validators.xml 的文件在你的classpath (/web-inf/classes) 的根目录下
文件中的内容类似如下:

<validators>

<validator name="required" class="com.opensymphony.xwork.validator.validators.requiredfieldvalidator"/>

<validator name="requiredstring" class="com.opensymphony.xwork.validator.validators.requiredstringvalidator"/>

<validator name="int" class="com.opensymphony.xwork.validator.validators.intrangefieldvalidator"/>

<validator name="double" class="com.opensymphony.xwork.validator.validators.doublerangefieldvalidator"/>

<validator name="date" class="com.opensymphony.xwork.validator.validators.daterangefieldvalidator"/>

<validator name="expression" class="com.opensymphony.xwork.validator.validators.expressionvalidator"/>

<validator name="fieldexpression" class="com.opensymphony.xwork.validator.validators.fieldexpressionvalidator"/>

<validator name="email" class="com.opensymphony.xwork.validator.validators.emailvalidator"/>

<validator name="url" class="com.opensymphony.xwork.validator.validators.urlvalidator"/>

<validator name="visitor" class="com.opensymphony.xwork.validator.validators.visitorfieldvalidator"/>

<validator name="conversion" class="com.opensymphony.xwork.validator.validators.conversionerrorfieldvalidator"/>

<validator name="stringlength" class="com.opensymphony.xwork.validator.validators.stringlengthfieldvalidator"/>

<validator name="regex" class="com.opensymphony.xwork.validator.validators.regexfieldvalidator"/>

</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中的缺省构造函数

三、定义校验规则

<!doctype validators public "-//opensymphony group//xwork validator 1.0.2//en"

"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">

<validators>

<field name="name">

<!--必添-->

<field-validator type="requiredstring">

<!--是否使用trim-->

<param name="trim">true</param>

<!--提示的错误信息-->

<message>you must enter a name</message>

</field-validator>

</field>

<field name="currdate">

<field-validator type="date">

<!--最小时间-->

<param name="min">01/01/2007</param>

<!--最大时间-->

<param name="max">02/28/2007</param>

<!--提示的错误信息-->

<message>

the date must be between 01-01-2007 and 02-28-2007.

</message>

</field-validator>

</field>

<field name="url">

<!--short-circuit是否短路检验,类似&&运算的短路算法-->

<field-validator type="required" short-circuit="true">

<!--提示的错误信息-->

<message>you must enter a value for url.</message>

</field-validator>

<!--webwork提供的url验证-->

<field-validator type="url" short-circuit="true">

<!--提示的错误信息-->

<message>not a valid url.</message>

</field-validator>

</field>

<field name="mail">

<field-validator type="required">

<message>you must enter a value for 邮件.</message>

</field-validator>

<!--mail的验证,验证器由webwork提供-->

<field-validator type="email">

<message>not a valid 邮件.</message>

</field-validator>

</field>

<field name="age">

<field-validator type="int">

<!--同样的最大最小值-->

<param name="min">1</param>

<param name="max">200</param>

<message>


<!--注意这里,msn中可以用表达式取出值栈中的值例如$

{min}-->


only people ages $

{min} to $

{max} may be true,otherwise

you are a ghost

</message>

</field-validator>

</field>

<field name="desc">

<field-validator type="requiredstring">

<param name="trim">true</param>

<message>you must enter a desc</message>

</field-validator>

<field-validator type="stringlength">

<param name="minlength">1</param>

<param name="maxlength">10</param>

<!--从属性文件中取出my.key显示,如果取不到my.key就显示

you must enter a desc length=10(my.key)-->

<message key="my.key">

you must enter a desc length=10(my.key)

</message>

</field-validator>

<!--可以使用正则表达式-->

<field-validator type="regex">

<param name="expression">

<![cdata[([a-z][0-9][a-z][x])]]>

</param>


<!--message可以由固定的字符串,值栈中的值$

{desc}以及通过调用方法取到的


属性文件中的值$

{gettext('my.key')}-->

<message>

"regex error ${gettext('my.key')} ${desc}"

</message>

</field-validator>

</field>

<!--上边的验证叫字段验证,下边这些验证叫普通验证,普通验证是优于字段验证的。

在使用短路的时候要小心-->

<!--上边那些都是基于字段的验证,这个是基于action的验证

如果要在页面显示这些消息,需要加入<ww:actionerror/>

-->

<validator type="expression">

<!--可以基于表达式的验证name.equals(desc)-->

<param name="expression">name.equals(desc)</param>

<message>name not the same as desc</message>

</validator>

<!-- plain validator 2 -->

<!--可以基于表达式的验证mail.startswith('mark')-->

<validator type="expression" short-circuit="true">

<param name="expression">mail.startswith('mark')</param>

<message>email does not start with mark</message>

</validator>

</validators>
四、客户端验证
加入validate="true"
<ww:form name="test" action="javascriptvalidation" validate="true">
...
</ww:form>
这样的话webwork会根据你的服务器端的验证,对应生成javascript的验证,而且提示信息和服务器端
验证的方式一样,而不是alert的方式显示。(前题是你使用的都是标准的验证器)
五、
对应上边验证器的web页面

<%@page contenttype="text/html; charset=utf-8" pageencoding="utf-8"%>

<%@ taglib prefix="ww" uri="/webwork"%>

<!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd">

<html>

<head>

<title></title>

<ww:head />

</head>

<body>

<!--

如果想统一的显示所有的erro打开下边这句

<ww:fielderror />

如果想显示其中一个error打开下边这句,默认显示在字段的正上方

<ww:fielderror>

<ww:param value="%{'name'}" />

</ww:fielderror>

<ww:fielderror>

<ww:param>desc</ww:param>

</ww:fielderror>

-->

<ww:form name="test" namespace="/" action="dbadmin" method="post" validate="true">

<ww:actionmessage />

<ww:actionerror/>

<ww:textfield label="name" name="name" />

<ww:date id="strcurrdate" name="currdate" format="yyyy-mm-dd" />

<ww:datepicker name="currdate" id="currdate" showstime="true"

format="%y-%m-%e %h:%m" cssclass="tx" language="zh" required="true"

template="datepicker.ftl" label="currdate" value="%{strcurrdate}" >

</ww:datepicker>

<ww:textfield label="url" name="url" />

<ww:textfield label="mail" name="mail" />

<ww:textfield label="age" name="age" />

<ww:textfield label="desc" name="desc" />

<ww:submit action="dbadmin" method="dotestvalidator"

value="dotestvalidator" />

</ww:form>

</body>

</html>

六、对应上边的action代码

package niis.web.actions.temp;


import java.text.simpledateformat;

import java.util.date;


import niis.persistence.itestdao;

import niis.persistence.dao.sqlcommand;

import niis.web.actions.abstractaction;



public class dbadminaction

{

private string name;

private date currdate ;

private string url;

private string mail;

private int age;

private string desc;


public string dotestvalidator()

{

system.out.println(name);

system.out.println(currdate);

system.out.println(url);

system.out.println(mail);

system.out.println(age);

return success;

}


/** *//**

* @return the age

*/


public int getage()

{

return age;

}


/** *//**

* @param age the age to set

*/


public void setage(int age)

{

this.age = age;

}


/** *//**

* @return the date

*/


public date getcurrdate()

{

return currdate;

}


/** *//**

* @param date the date to set

*/


public void setcurrdate(date date)

{

this.currdate = date;

}


/** *//**

* @return the mail

*/


public string getmail()

{

return mail;

}


/** *//**

* @param mail the mail to set

*/


public void setmail(string mail)

{

this.mail = mail;

}


/** *//**

* @return the name

*/


public string getname()

{

return name;

}


/** *//**

* @param name the name to set

*/


public void setname(string name)

{

this.name = name;

}


/** *//**

* @return the url

*/


public string geturl()

{

return url;

}


/** *//**

* @param url the url to set
扫描关注微信公众号