【Struts2】【后台输入效验】【validation拦截器】

原理:

后台输入效验,是在Action类已经得到参数后,在使用参数前,判断参数是否符合业务要求,不符合,跳转到别的逻辑视图
注意点:判断时候要判断是否为空,防止空指针异常

输入效验的拦截器

  • validation拦截器:
    将错误原因存入fieldErrors中
  • workflow拦截器
    判断fieldErrors是否有错误信息,若有,就return “input”;(默认逻辑视图)

输入效验的使用(实现于Validateable)

jsp代码

<%session.invalidate(); %>
<s:debug/>
<s:form action="/Login_login">
    帐号<s:textfield name="user.username"/><br>
    密码<s:password name="user.password" /><br>
    <s:submit value="do it"/>
</s:form>
1.对Action中多个方法需要输入效验
  • @InputConfig(resultName=”login”):执行该方法前,判断Fileerror或ActionError中是否有数据,若有,就跳转到”login”的逻辑视图;
  • @SkipValidation:表示该方法不需要效验.workflow拦截器放行
  • 效验方式
    • 覆盖方法void validate();
    • 在方法内写
      if(字段不符合要求,必须判断不为空,防止空指针异常)
      {super.addFieldError("错误key", "错误value");}
public class LoginAction extends ActionSupport implements Validateable{
    //自动获取jsp的参数
    private static final long serialVersionUID = 1L;
    private User user=new User();
    public User getUser() {
        return user;
    }

    //输入效验,1.帐号不能为空和null;2.密码不能为空且大于10(必须判断不为空,防止空指针异常)
    public void validate{
        if(!StringUtils.hasLength(user.getUsername())) {
        super.addFieldError("error_by_username", "帐号不可以为空");
        }
        if(user.getPassword()==null||user.getPassword().length()<10) {
            super.addFieldError("error_by_password", "密码长度大于10");
        }
    }



    //处理登入信息存入session
    @InputConfig(resultName="login")
    public String login() throws Exception {
            ActionContext ctx = ActionContext.getContext();
            ctx.getSession().put("USER_IN_SESSION", user);
            return "main";

    }

    //进入登入界面
    @SkipValidation
    public String execute() throws Exception {
        return "login" ;
    }

}
2.对Action中一个方法需要输入效验
  • 免去输入效验的标签
  • 将validate方法名改为validateLogin即可
public class LoginAction extends ActionSupport implements Validateable{

    private User user=new User();
    public User getUser() {
        return user;
    }
    //更改方法名
    public void validateLogin() {
        if(!StringUtils.hasLength(user.getUsername())) {
            super.addFieldError("error_by_username", "帐号不可以为空");
        }if(user.getPassword()==null||user.getPassword().length()<10) {
            super.addFieldError("error_by_password", "密码长度大于10");
        }
    }

    //处理登入信息存入session
    public String login() throws Exception {
            ActionContext ctx = ActionContext.getContext();
            ctx.getSession().put("USER_IN_SESSION", user);
            return "main";

    }

    //进入登入界面
    public String execute() throws Exception {
        return "login" ;
    }
}
3.在jsp页面显示错误信息

当不输入密码或不输入帐号时候;回跳转到”login”的逻辑视图.并将fieldErrors存入Root区:
这里写图片描述.

  • fieldErrors是root区的key,其value是一个list;
    • list里面装的是键值对,该键值对<String,String[]>.

在jsp显示错误的信息:

    全部错误:<s:property value="fieldErrors"/><br>
    帐号的全部错误:<s:property value="fieldErrors.error_by_username"/><br>
    帐号的首个错误:<s:property value="fieldErrors.error_by_username[0]"/><br>

这里写图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值