struts2输入校验完整解析222222

来源:互联网 发布:刺客信条叛变优化补丁 编辑:程序博客网 时间:2024/06/14 12:45

输入校验分为客户校验和服务器校验。客户校验主要是通过JAVASCRIPT 代码完成。服务器端校验是通过应用编程实现。输入校验是表现层数据处理的一种,应该由MVC 框架提供。Struts2 提供了内置校验器,应用无需书写任何校验代码,即可完成绝大部分输入校验。如果校验很负责,也可以通过 validate 方法来完成自定义校验。

8.1 验证实例

1) yan.jsp

  <s:form action="yan" method="post">

    <s:textfield name="username" label="用户名/>    

    <s:password name="password"  label="密码/>     

    <s:password name="password1" label="验证密码/>  

    <s:textfield  name="age"     label="年龄/>     

    <s:textfield name="birthday" label="出生日期/>  

    <s:textfield name="workdate" label="工作日期/>  

    

    <s:submit label="注册/>  

  </s:form>

 2) Yan.class 

public class yan extends ActionSupport

{

private String username;

private String password;

private String password1;

private int age;

private Date birthday;

private Date workdate;

  //省略 get / set 方法

if(null==username || username.length()<6 ||username.length()>12)

 {

 this.addFieldError("username","username  invalid");

 }

 

 if(null==password || password.length()<6 ||password.length()>12)

 {

 this.addFieldError("password","password  invalid");

 }

If ( null!=birthday && null!=workdate )

 {

 Calendar c1=Calendar.getInstance();

 c1.setTime(birthday);

 Calendar c2=Calendar.getInstance();

 c2.setTime(workdate);

 

 if(c2.before(c1))

 {

 this.addFieldError("workdate","workdate before birthday");

 }

 

 }

3) ok.jsp

  <s:property value="username" />  <br />

   <s:property value="password" />  <br />

   <s:property value="age" />       <br />

   <s:property value="birthday" />  <br />

   <s:property value="workdate" />  <br />

当 年龄输入非数字类型,会出现

需要在国际化文件加入  xwork.default.invalid.fieldvalue={0} error

也可以做一个局部国际化文件 yan.properties ,要和yan 放在同一个包下

我们还可以把 

this.addFieldError("username","username  invalid");   属于 Map

改为  this.addActionError("username invalid");       属于 Array

 

Yan.jsp 的错误信息显示,需要加入   <s:actionerror  />

8.2 校验框架

我们可以使用校验文件来实现对字段内容的校验

删除 validate方法。 校验文件的名字的规则是 <action名字>-validation.xml . 内容如下:

<?xml version="1.0" encoding="GBK"?>

<!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="username">

<field-validator type="requiredstring">

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

<message>必须输入名字</message>

</field-validator>

<field-validator type="regex">

<param name="expression"><![CDATA[(\w{4,25})]]></param>

<message>您输入的用户名只能是字母和数组,且长度必须在425之间</message>

</field-validator>

</field>

<field name="password">

<field-validator type="requiredstring">

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

<message>必须输入密码</message>

</field-validator>

<field-validator type="regex">

<param name="expression"><![CDATA[(\w{4,25})]]></param>

<message>您输入的密码只能是字母和数组,且长度必须在425之间</message>

</field-validator>

</field>

<field name="age">

<field-validator type="int">

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

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

<message>年纪必须在1150之间</message>

</field-validator>

    </field>

<field name="birthday">

<field-validator type="date">

<param name="min">1900-01-01</param>

<param name="max">2050-02-21</param>

<message>年纪必须在${min}${max}之间</message>

</field-validator>

</field>

</validators>

如果输出的是国际化信息 ,那么改为 <message key="xing.username" />

如果要 客户端校验    <s:form action="yan" method="post"  validate="true">

如果是客户端验证,那么 <message key="xing.username" /> 会出错误。需要改成下面格式

<message>${getText("xing.username")}</message>

8.3 校验器的配置风格:

一种是字段优先,称为字段校验风格,一种是校验器风格,称为非字段校验器风格。

8.3.1 字段校验器配置风格:

校验文件以<field ../> 元素为基本子元素。在 <validators> 下可以有 <field > 或者是 <validator ./>。出现<field > 就是字段校验器 ,出现<validator ./>就是非字段校验器。字段校验器格式如下:

<field  name=”被校验的字段”>

  <field-validator  type=”校验器名” >

<!—此处需要为不同的校验器指定数量的校验参数 à

<param  name=”参数名”>参数值</param>

………

<message  key=”I18Nkey “>校验失败提示信息</message>

</field-validator>

<!—如果该字段要满足多个规则,下面可以继续配置多个校验器 –-  >

  </field>

 上面代码可以看出 <field> 是校验规则文件的基本组成单位。每个<field-validator  type=”校验器名” >指定一个校验规则。<field-validator > 必须要有个<message>

8.3.2 非字段校验器配置风格:

是一种以校验器优先的配置方式。在校验器文件的根元素包含了多个<validator /> 元素,每个<validator> 定义了一个规则。

<validator  type=”校验器”>

  <param  name=”fieldname”>需要被校验的字段</param>

 

<param  name=”参数名”>参数值</param> 

<message  key=”I18Nkey”></message>

</validator>

上例验证文件内容如下:

<?xml version="1.0" encoding="GBK"?>

<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"

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

<validators>

 <validator  type="requiredstring">

   <param  name="fieldName">username</param>

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

   <message>用户名不能为空</message>

 </validator>

 

 <validator  type="regex">

   <param  name="fieldName">username</param>

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

   <param  name="expression"><![CDATA[(\W{4,25})]]></param>

    <message>用户名长度要在4-25 之间</message>

 </validator>

 

  <validator  type="requiredstring">

   <param  name="fieldName">password</param>

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

   <message>密码不能为空</message>

 </validator>

 

 <validator  type="regex">

   <param  name="fieldName">password</param>

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

   <param  name="expression"><![CDATA[(\W{4,25})]]></param>

    <message>密码长度要在4-25 之间</message>

 </validator>

 

 <validator type="int">

    <param  name="fieldName">age</param>

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

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

     <message>年龄超过范围</message>

 </validator>

 

 <validator type="date">

   <param name="fieldName">birthday</param>

    <param name="min">1900-01-01</param>

    <param name="max">2050-1-1</param>

    <message>年龄超过范围</message>

 </validator>

</validators>

<field-validator type="requiredstring" short-circuit="true"> 表示短路的意思

8.4 内建校验器

1) 必填校验器 : required,要求指定的字段必须有值,他可以接受一个参数

fieldname 该参数指定校验的Action 属性名,如果采用字段校验器风格,则无需指定改参数

(1) 非字段校验器

   <validator  type="required">

   <param  name="fieldName">username</param>

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

   <message>用户名不能为空</message>

 </validator>

2) 必填字符串校验器:requiredstring 表示字符串的长度必须是大于0. 防止””出现

  

(1) 非字段校验器

<validator  type="requiredstring">

   <param  name="fieldName">username</param>

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

   <message>用户名不能为空</message>

 </validator>

3) 整数校验器:  int .可接受如下参数 fieldName  , min ,  max

(1) 非字段校验器

<validator type="int">

<param  name="fieldName">age</param>

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

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

<message>年龄超过范围</message>

</validator>

4)日期校验器:date,可接受如下参数 fieldName  , min ,  max

1)非字段校验器

<validator type="date">

<param name="fieldName">birthday</param>

 <param name="min">1900-01-01</param>

 <param name="max">2050-1-1</param>

  <message>年龄超过范围</message>

</validator>

5) 字段表达式校验器:fieldexpression . 他可以接受两个参数 fieldname 和 expression 。其中 expression 指定一个逻辑表达式,该逻辑表达式是基于ValueStack进行求值的。他返回一个 booleanTrue 表示通过.

( 1) 非字段校验器

<validator type="fieldexpression">

   <param name="fieldName">password</param>

    <param name="expression"><![CDATA[(password == password1)]]></param>

    <message>两个密码不一样</message>

 </validator>

(2) 字段校验器

<field name="password">

<field-validator type="fieldexpression">

  <param name="expression"><![CDATA[(password == password1)]]></param>

     <message>两个密码不一样</message>

</field-validator>

</field>

6 ) 邮件地址校验器: email

( 1) 非字段校验器

<validator type="email">

   <param name="fieldName">email</param>

    <message>不是一个有效的邮件地址</message>

 </validator>

(2) 字段校验器

<field name="email">

<field-validator type="email">

<message>不是一个有效的邮件地址</message>

</field-validator>

</field>

7 ) 网址校验器: url

( 1) 非字段校验器

<validator type="url">

   <param name="fieldName">url</param>

    <message>不是一个有效的网址</message>

 </validator>

(2) 字段校验器

<field name="url">

<field-validator type="url">

<message>不是一个有效的网址</message>

</field-validator>

</field>

8)字符串长度校验器: stringlength ,他可以接受如下几个参数

  fieldName   maxLength   minLength    trim

( 1) 非字段校验器

<validator type="stringlength">

   <param  name="fieldName">username</param>

   <param name="minLength">4</param>

   <param name="maxLength">150</param>

<message>名字长度超过范围</message>

</validator>

(2) 字段校验器

<field name="username">

<field-validator type=" stringlength ">

<param name="minLength">4</param>

   <param name="maxLength">150</param>

<message>名字长度超过范围</message>

</field-validator>

(9) 正则表达式校验器: regex  .他接受如下参数

 fieldname : Acton属性名

 expression :参数是必须的,用来匹配的正则表达式

 caseSensitive:指定匹配的时候是否区分大小写,默认  true;

( 1) 非字段校验器

<validator  type="regex">

   <param  name="fieldName">password</param>

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

   <param  name="expression"><![CDATA[(\W{4,25})]]></param>

    <message>密码长度要在4-25 之间</message>

 </validator>

(2)  </validator>字段校验器

<field name="password">

<field-validator type="requiredstring">

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

<message>必须输入密码</message>

</field-validator>

<field-validator type="regex">

<param name="expression"><![CDATA[(\w{4,25})]]></param>

<message>您输入的密码只能是字母和数组,且长度必须在425之间</message>

</field-validator>

<field-validator type="fieldexpression">

  <param name="expression"><![CDATA[(password == password1)]]></param>

     <message>两个密码不一样</message>

</field-validator>

</field>

原创粉丝点击