首页 > WEB开发 > 后台开发 > Struts2封装请求参数和输入校验
2014
09-11

Struts2封装请求参数和输入校验

二、Struts2输入校验:服务器端校验

1、Struts2提供了如下两种校验方式:

  • 在动作类中编程校验(validate方法)
  • 编写配置文件校验

前提是动作类必须继承ActionSupport!

下面的案例用于完成账号密码不能为空的验证。

1) 编程校验:在动作类中覆写validate方法

02. Struts2封装请求参数和输入校验2155

这种方式的校验需要注意:

  • validate方法会在其他动作方法之前执行,即validate中定义的验证会对该类中所有动作方法生效。对于有些不需要验证的动作方法,如update、findAll等,只需给该方法加上@SkipValidation注解即可(推荐)。也可编写validateXxx方法,该方法只对xxx动作方法进行验证。
  • 当某个数据校验不通过时,调用addFieldError()方法往系统的fieldErrors添加错误信息,如果系统的fieldErrors不为空,struts2会将请求转发到名为input的result。
  • 在input视图中可以通过<s:fielderror/>显示错误信息

执行编程校验时的执行流程如下:

a.封装请求参数。如果在类型转换的过程中出现异常,进入第②步,否则进入第③步。

b.系统将异常信息保存到ActionContext,conversionError拦截器将异常信息封装到fieldErrors里,然后执行第3步。

c.系统通过反射技术调用action中的validateXxx()/validate()方法。

d.经过上面4步,如果系统中的fieldErrors不为空(存在错误信息),系统自动将请求转发至名为input的视图。如果系统中的fieldErrors没有任何错误信息,系统将执行action中的动作方法。

2) 写配置文件校验:写校验规则和消息提示

在动作类所在的包中,建立名字为”动作类名-validation.xml”的配置文件,该配置文件的DTD为:xwork-core-2.3.15.3.jar / xwork-validator-1.0.3.dtd。

配置文件的内容有两种形式:分别对应着<field>元素和<validator>元素。如下图所示

02. Struts2封装请求参数和输入校验2912

写配置文件的方式也会对动作类中的所有动作方法进行校验,如果动作方法不需要字段校验,只需在动作方法上增加@SkipValidation注解即可。

2、Struts2框架提供的内置校验器

校验配置文件中的type属性指定了校验器类型,requiredstring是由Struts2框架提供的。Struts提供了能满足大部分验证需求的校验器,这些校验器的定义可以在xwork-core-2.3.15.3.jar\com\opensymphony\xwork2\validator\validators\default.xml中找到。

02. Struts2封装请求参数和输入校验3179

<param>元素用于向校验器对应的类中传入参数。如上面的filedName是RequiredStringValidator类中的属性,运行时通过setter方法注入。

常用校验器案例:

required:必填校验器

<field-validator type=”required”>

<message>性别不能为空!</message>

</field-validator>

requiredstring:必填字符串校验器

<field-validator type=”requiredstring”>

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

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

</field-validator>

stringlength:字符串长度校验器

<field-validator type=”stringlength”>

<param name=”maxLength”>10</param>

<param name=”minLength”>2</param>

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

<message><![CDATA[产品名称应在2-10个字符之间]]></message>

</field-validator>

int:整数校验器

<field-validator type=”int”>

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

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

<message>年龄必须在1-150之间</message>

</field-validator>

date: 日期校验器

<field-validator type=”date”>

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

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

<message>生日必须在${min}到${max}之间</message>

</field-validator>

url: 网络路径校验器

<field-validator type=”url”>

<message>个人主页地址必须是一个有效网址,以http://开头</message>

</field-validator>

email:邮件地址校验器

<field-validator type=”email”>

<message>电子邮件地址无效</message>

</field-validator>

regex:正则表达式校验器

<field-validator type=”regex”>

<param name=”expression”><![CDATA[^1\d{10}$]]></param>

<message>手机号格式不正确!</message>

</field-validator>

fieldexpression : 字段表达式校验

<field-validator type=”fieldexpression”>

<param name=”expression”><![CDATA[(password==repassword)]]></param>

<message>两次密码输入不一致</message>

</field-validator>

3、自定义校验器

案例:验证密码强度

1)定义校验器类

可以实现Validator接口或者继承ValidatorSupport。如果是验证表单字段有关,建议继承FieldValidatorSupport。

02. Struts2封装请求参数和输入校验4764

2)声明校验器(先声明,后使用)

02. Struts2封装请求参数和输入校验4784

3)可以像使用requiredstring一样来使用strongpassword了

02. Struts2封装请求参数和输入校验4829


留下一个回复

你的email不会被公开。