【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>

这里写图片描述

发布了73 篇原创文章 · 获赞 12 · 访问量 4万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章