注解进行后台校验,代码如下
@RequestMapping(value="/add3.do")
public String add3(Model model,@Valid UserInfo info,BindingResult result,String user_name){
System.out.println("UserInfoController.add3()");
System.out.println(info.getUserName()+"\t"+info.getPassword()+"user_name="+user_name );
if(result.hasErrors()){
model.addAttribute("errors", result.getFieldError().getDefaultMessage());
return "user_add";
}
return "user_add";
}
问题:
1. 现在@valid能对UserInfo这个bean进行校验,如果现在有需求对user_name进行校验如何编写处理?
2. 校验不通过的返回值如何传递,怎么处理得当到JSP那边获取比较方便,看网上其他帖子很多都是用form标签,不会这个,如果用其他的EL表达式等等怎么获取
通过@ModelAttribute 获取上一个页面的值,并且可以把值传到下一个页面
注意:被@ModelAttribute注释的方法会在此controller每个方法执行前被执行,因此对于一个controller映射多个URL的用法来说,要谨慎使用。
index.jsp页面:
<div>
<form action="/springMVC-spring/user/checkUser2" method="post">
姓名:<input type="text" name="name">
<br>
密码:<input type="text" name="pwd">
<br>
<input type="submit" value="登录">
</form>
</div>
controller类方法:
@RequestMapping("/checkUser2")
public String checkMemberUser2(@ModelAttribute("user")MemberUser user,ModelMap model)
{
String result=userSer.checkUser(user);
model.put("result", result);
return "turnPage";
}
turnPage.jsp 跳转页面:
<h1>${result}!</h1>
<br>
<br>
user:${user }
<br>
user.name:${user.name }
<br>
user.pwd:${user.pwd }
其他页面我不知道,但是freemarker可以很好的处理你这个问题哦。给你一个实例:
<@spring.showErrors "
"/>就是BindingResult里面的错误数量,你返回原有的页面,它自动会显示出来的,这个是和formInput标签配对使用
Controller层可以用BindingResult 的reject方法进行错误添加,如果你不想用这个BindingResult的话,也没关系,用一个Model对象,然后
addAttribute(...,....),前台用jstl表达式接受,颜色改成红色的,类似于:model.addAttribute("errSendName", obj[1].toString());
前台:${errSendName?default('')},,,,,这是freemarker的表达式