struts2输入校验(三)

一、输入校验案例(用户注册)

  1、注册页面register.jsp

       <h2>用户注册</h2>
       <form action="register.action">
           username:<input type = "username" size = "20" name = "username" title="username"/><br/>
           password:<input type = "password" size = "20" name = "password"/><br/>
           repassword:<input type = "password" size = "20" name = "repassword"/><br/>
           age:<input type = "text" size = "20" name = "age"/><br/>
           birthday:<input type = "text" size = "20" name = "birthday"/><br/>
           graduation:<input type = "text" size = "20" name = "graduation"/><br/>
           <input type = "submit" value = "submit"/>
       </form>
 2、处理用户注册的action类 RegisterAction.java

public class RegisterAction extends ActionSupport{
   private String username;
   private String password;
   private Integer age;
   private Date birthday;
   private Date graduation;
   //.....setter/getter....
  public void validate(){
     //用户名长度在4到10之间
    if(null == username ||username.length()<4||username.length()>10){
         //发生错误后将其添加到Action级别的错误中
         this.addActionError("username invalid ");
        //将发生的错误将其添加到Field级别错误中
         this.addFieldError("username","username is validate");
    }
    //判断密码、年龄是否符合要求省略
    //判断两个日期前后
   if(null != birthday && null!= graduation){
        Calendar c1 = new Calendar.getInstance();
          c1.setTime(birthday);
        Calendar c2 = new Calendar.getInstance();
          c2.setTime(graduation);
          if(!c1.before(c2)){
                this.addActionError("birthday should be before graduaction");
          } 
     }
  }
     public String execute()throws Exception{
             return SUCCESS;
        }
}
 3、配置struts.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
   
    <package name="struts2" extends="struts-default">
       <action name="register" class="com.liusheng.action.RegisterAction">
          <result name="success">index.jsp</result>
          <result name="input">register.jsp</result>
       </action>
    </package>
</struts>
4、如果想要发生错误的提示信息显示到页面上还需要在register.jsp中添加如下代码

<s:actionerror cssStyle="color:red;"/><!-- 如果action发生错误就显示出来 -->
       <s:fielderror></s:fielderror>

二、输入校验说明

  1、通过在Action中的validate()方法进行处理,该方法的默认实现为空实现,因此该方法需要我们自己实现;

  2、Action中各方法的执行顺序:

       1):首先进行类型转换;

       2):然后进行输入校验(执行validate()方法);

      3):再次才是执行execute()方法;如果在上述过程中出现任何错误,都不会执行execute()方法

                页面会转向struts.xml中该action的名为input的result所对应的页面。

  3、自定义方法的输入校验方法

       Action中自定义方法的输入校验,对于通过action的method属性所指定的自定义方法,其对应的自定义输入

       校验方法名为validateMyExecute(假设自定义方法名为myExecute)。

           当Action中即存在默认的校验方法与自定方法的校验方法,自定义的校验方法优先执行。
  

  4、struts2的校验框架(有效的xml文件)

         你想对哪个action进行校验(RegisterAction)

         其对应的校验框架名称为:RegisterAction-validation.xml且该文件要置于与Action相同的包下
 
   5、自定义Field级别的错误提示信息

         1):新建一个以Action名命名的properties文件;

         2):然后在该属性文件中指定每一个出错字段的错误消息

                   属性文件内容:invalid.fieldvalue.字段 = 错误消息

三、关于清空错误信息分析

   对于两个错误级别的清楚方法:

     你会发现当你在action中的validate()方法中的最后写入如下代码:

public void validate(){
     this.addActionError("usename is validate");
    this.addFieldError("username","is error");

    this.getFieldErrors().clear();
    this.getActionErrors().clear();
}
  访问的现象是:错误提示依旧出现

  原因是:通过两个方法会将之前存放错误信息的ArrayList对象信息拷贝一份到新产生的ArrayList对象(本质是引用的指向),因此

                在对新的ArrayList对象进行clear()时,删除的是新对象的引用。而之前的错误信息没有收到任何影响。

     如果需要进行清空则要调用:

           this.clearActionErrors();

           this.clearFieldErrors();

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值