Struts2手工验证

基本验证(对action的所有方法进行校验)





要进行验证,action必须继承ActionSupport或者实现Validateable
要重写Validateable该接口中的validate()方法

 该方法与setUsername()方法和login()方法的执行顺序是

setUsername(String username)
validate()
login()
如果验证没有通过,要转向错误处理页面,由result标签的name=“input”指定

            <resultname="imput">/validate/login.jsp</result>

什么时候表示验证没有通过?

      * 验证通过:1、集合存在,但集合中的内容为空;2、集合不存在

      * 验证不通过:集合存在,并且集合中的内容不为空

如何往集合中存放错误信息:this.addFieldError("username","用户名错误");

      * 参数1key(用户字段名,Action中的属性名)fieldName="username"

      * 参数2:错误信息,errorMessage="用户名错误"

public synchronized void addFieldError(String fieldName, String errorMessage) {

        final Map<String,List<String>> errors = internalGetFieldErrors();   //Map集合

        List<String>thisFieldErrors = errors.get(fieldName);                       //list集合

        if(thisFieldErrors == null) {                                                              //list集合为空

            thisFieldErrors = new ArrayList<String>();                                   //创建一个新的list集合

            errors.put(fieldName, thisFieldErrors);                                         //放置list集合到Map集合中

        }

        thisFieldErrors.add(errorMessage);                                                //list集合中放置错误信息

   }

显示错误Jsp页面:

      使用<s:fielderror/>显示错误消息

     注:使用<s:fielderror/>标签即可将错误提示信息输出到页面中。

基本验证(对action的指定方法进行校验)


底层代码(ValidationInterceptor拦截器)




输入校验的流程


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

2。如果在执行类型转换的过程中出现异常,系统会将异常信息保存到ActionContextconversionError拦截器将异常信息封装到fieldErrors里,然后执行第3步。如果类型转换没有出现异常,则直接进入第3步。

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

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

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


总结



struts2手动验证:
    * 首先要从页面中获取对应的标签name属性的值,在动作类action中声明同名的属性,提供get和set方法
    
    * 要继承ActionSupport类或者实现Validateable接口
    
    * 重写Validateable接口的validate()方法
        * 前提是:要保证setUsername()、validate()、login()方法要按照这个先后顺序执行
    
    * 如果登录失败,如何处理:
        * this.addFieldError( key, value);
            * key:错误提示字段
            * value:错误提示信息
    
    * 什么时候才是验证通过?
        * 验证通过:1、map集合不存在;2、map集合存在并为空
        * 验证不通过:map集合存在并且不为空
    
    * 分析需求:
        * 用户名不能为null ,""
        * 密码不能为null, "" ,并且密码的长度6-12之间
    
    * 针对所有业务方法进行验证还是针对某个指定业务方法进行验证?
        * 重写的validate()方法,针对所有业务方法进行验证
        * 重写的validate()方法加上要验证的指定的业务方法名(业务方法名的首字母大写),实现针对某个指定的业务方法进行验证
            * 为什么要这样进行拼接?因为struts2框架底层拼接,如果不这样写,底层就找不到对应方法名
   










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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值