Struts2中的验证

Struts2的输入效验

    在struts2中,我们可以实现对action的所有业务方法进行校验或者对action的指定业务方法进行校验。

对于输入校验struts2提供了两种实现方法:
1. 基于验证方法编写代码实现。
2. 基于验证框架配置方式实现。

基于验证方法编写代码实现

在action中提供validate() 方法实现输入校验,该方法对action中所有的业务方法均有作用。

当某个数据校验失败时,我们应该调用addFieldError()方法往系统的fieldErrors添加校验失败信息(为了使用addFieldError()方法,action可以继承ActionSupport ),如果系统的fieldErrors包含失败信息,struts2会将请求转发到名为input的result。在input视图中可以通过struts2的标签<s:fielderror/>显示失败信息。



基于验证方法编写代码实现

validate()使用例子:
public void validate() {
       if(this.mobile==null || "".equals(this.mobile.trim())){  this.addFieldError(“mobile", "手机号不能为空");
        }else{  if(!Pattern.compile("^1[358]\\d{9}").matcher(this.mobile.trim()).matches()){
        this.addFieldError(“mobile", "手机号的格式不正确"); }
       }
}
验证失败后,请求转发至input视图:
<result name="input">/addUser.jsp</result>

在addUser.jsp页面中使用<s:fielderror/>或者${FiledErrors.key[0]}显示失败信息
通过validateXxxx()方法实现针对某个指定方法的验证,xxxx代表业务方法的方法名。

 validateXxxx()方法使用例子:
public String add() throws Exception{  return "success";}    
public void validateAdd(){
          if(username==null && "".equals(username.trim()))  this.addFieldError("username", "用户名不能为空");
}


输入校验的流程

1、类型转换器对请求参数执行类型转换,并把转换后的值赋给action中的属性。

2、如果在执行类型转换的过程中出现异常,系统会将异常信息保存到ActionContext,conversionError拦截器将异常信息添加到fieldErrors里。不管类型转换是否出现异常,都会进入第3步。

3、系统通过反射技术先调用action中的validateXxx()方法,Xxx为方法名。

4、再调用action中的validate()方法。

5、经过上面4步,如果系统中的fieldErrors存在错误信息(即存放错误信息的集合的size大于0),系统自动将请求转发至名称为input的视图。如果系统中的fieldErrors没有任何错误信息,系统将执行action中的处理方法。

基于验证框架配置方式实现

校验文件和action类放在同一个包下,文件的取名格式为:ActionClassName-validation.xml,其中ActionClassName为action的简单类名,-validation为固定写法。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.3//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd">
<validators>

</validators>

为方便编写validation.xml,导入xwork-validator-1.0.3.dtd到MyEclipse中。 
struts2所提供的验证规则全部在com.opensymphony.xwork2.validator.validators目录下的default.xml中。


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>产品名称应在2-10个字符之间</message>
</field-validator>

email:邮件地址校验器
<field-validator type="email">
    <message>电子邮件地址无效</message>
</field-validator>

regex:正则表达式校验器
<field-validator type="regex">
     <param name="expression"><![CDATA[^1[358]\d{9}$]]></param>
     <message>手机号格式不正确!</message>
</field-validator>

int:整数校验器
<field-validator type="int">
    <param name="min">1</param>
    <param name="max">150</param>
    <message>年龄必须在1-150之间</message>
</field-validator>

如果你只需要对action中的某个action方法实施校验,那么,校验文件的取名应为:ActionClassName-ActionName-validation.xml,其中ActionName为访问该action的名称
<action name="user_*" class="com.lovo.action.UserAction" method="{1}“ >
    <result name="success"></result>
    <result name="input">/addUser.jsp</result>
</action>
UserAction中有以下两个处理方法:
public String add() throws Exception{
}
public String update() throws Exception{
}
要对add()方法实施验证,校验文件的取名为: UserAction-user_add-validation.xml
要对update()方法实施验证,校验文件的取名为: UserAction-user_update-validation.xml

验证嵌套属性
Action中如果有一个特有的JavaBean属性,这种情况下要使用visitor验证。


public class AddAction extends ActionSupport{     private User user;
        //省略get/set方法
    }

<field name="user">     <field-validator type="visitor">             <param name="context">abc</param>             <param name="appendPrefix">true</param>             <message>User:</message>         </field-validator>     </field>
context参数将作为验证User类属性的文件名的一部分,如user属性返回一个User对象,那么用于验证User对象属性的文件名为User-abc-validation.xml。

appendPrefix表示是否附加错误信息,如果为true,当出错时Struts2会将<message>标签中的信息加到User-abc-validation.xml文件中的相应错误信息前面。


User-abc-validation.xml文件的内容如下:

<field name="name">       

 <field-validator type="requiredstring">           

 <message>请输入name</message>        

</field-validator>    

</field>   

 <field name="age">       

 <field-validator type="int">  

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

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

 <message>   必须在 5至20之间 </message>  

      </field-validator>    

</field>






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值