struts2学习笔记--使用Validator校验数据

t482in29 8年前

来自: http://www.cnblogs.com/fingerboy/p/5189742.html

我们在进行一些操作是需要对用户的输入数据进行验证,比如网站的注册,需要对各个数据项进行数据校验,Struts2提供了一些默认的校验器,比如数字的检测,邮箱的检测,字符串长度的检测等等.

  • 常用的Validator

校验器 作用
required 必填校验器,要求字段必须有值
requiredstring

必填字符串校验器,要求必须有值且长度大于0,即不能是空字符串。默认会去掉字符串前后空格

参数fieldName:该参数指定校验的字段名称,如果是字段校验,则不用指定该参数

参数trim:该参数为可选参数,用于指定是否在校验之前对字符串进行整理。

stringlength

字符串长度校验器,用于检验字段中字符串长度是否在指定的范围

参数 maxLength:用于指定最大字符串长度,该参数为可选

参数 minLength:用于指定最小字符串长度,该参数为可选

int

整数校验器,可以配置整数在指定的范围内

参数 min:指定字段值的最小值,该参数为可选

参数 max:指定字段值的最大值,该参数为可选

date

日期校验器,可以配置日期在指定的范围内

参数 min:指定字段日期值的最小值,该参数为可选

参数 max:指定字段日期值的最大值,该参数为可选

email

邮件地址校验器,要求被检查的字段如果非空,则必须是合法的邮件地址。

regex

检查是否能匹配到正则表达式,参数为regex

使用struts2的验证框架的要求:

在对应的action的包下添加一个验证框架的配置文件,文件名称为Action类名-validation.xml.如果Action中有多个方法,则一般使用Action类名-Action别名-validation.xml.例如LoginAction-addUser-validation.xml.

特别需要注意的是:支持校验的Action必须实现Validateable接口,一般继承ActionSupport类就可以了.

下面写一个简单的用户注册的demo来使用一下Validator,在web项目下新建一个注册的jsp文件,名为regist.jsp,引入ognl标签库,body部分代码为:

 <body>       <s:fielderror></s:fielderror>       <s:form action="user/regist.action" validate="true">               用户名:<input type="text" name="user.name"/><br>                 密码:<input type="password" name="user.password"/><br>                 出生日期:<input type="text" name="user.date"/><br>                 电子邮箱:<input type="text" name="user.email"/><br>                 <input type="submit" value="注册"/>       </s:form>    </body>

entity包下新建一个user实体类,代码省略.

action包下新建一个RegistAction,继承ActionSupport类,代码省略.

action包下新建一个RegistAction-validation.xml,代码如下:

<?xml version="1.0" encoding="UTF-8"?>  <!DOCTYPE validators PUBLIC           "-//Apache Struts//XWork Validator 1.0.3//EN"          "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">          <validators>                 <field name="user.name">                     <field-validator type="requiredstring">                         <param name="trim">true</param>                         <message>用户名不能为空</message>                     </field-validator>                     <field-validator type="stringlength">                         <param name="trim">true</param>                         <param name="maxLength">10</param>                         <param name="minLength">4</param>                         <message>用户名长度必须介于4到10之间</message>                     </field-validator>                                  </field>                 <field name="user.birthday">                     <field-validator type="date">                         <param name="min">1900-01-01</param>                         <param name="max">2016-01-01</param>                         <message>日期不满足要求</message>                     </field-validator>                 </field>                 <field name="user.email">                     <field-validator type="email">                         <param name="trim">true</param>                         <message>邮箱格式不满足要求</message>                     </field-validator>                 </field>          </validators>

struts.xml内配置action:

<package name="user" namespace="/user" extends="struts-default">          <action name="regist" class="com.wang.action.RegistAction" >              <result>/index.jsp</result>              <result name="input">/register.jsp</result>          </action>      </package>

如果检验失败,会转到input页面显示错误信息,因此action配置中必须要有一个名为input的jsp页面.运行之后,如果输入不符合要求的数据则会在浏览器提示出来.

我在写这个demo时碰到一个问题, 因为使用了ognl标签,在输入url访问regist.jsp页面时,报了一个错误 :

The Struts dispatcher cannot be found. This is usually caused by using Struts tags without the associated filter. Struts tags are only usable when the request has passed through its servlet filter, which initializes the Struts dispatcher needed for this tag. - [unknown location]

后来 将web.xml的url-pattern中的*.action改为/* 就解决了.据说还有一种方式是不改变上面配置,只需要 增加一个url-pattern为*.jsp即可 ,待检验.

</div>