原理:
后台输入效验,是在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[]>
.
- list里面装的是键值对,该键值对
在jsp显示错误的信息:
全部错误:<s:property value="fieldErrors"/><br>
帐号的全部错误:<s:property value="fieldErrors.error_by_username"/><br>
帐号的首个错误:<s:property value="fieldErrors.error_by_username[0]"/><br>