spring-mvc整合freemarker并在ftl模版中显示服务端校验的错误信息,JSR303或者JSR349
写法有多种,应该可以任意组合,最重要的是要引入spring.ftl
1.Bean里面的就不再多写了,来个简单就可以了
@NotEmpty(message="用户密码码不可为空") 或者写在get方法上
private String userPassword;
2.Controller里面的写法有几种,看个人习惯
(1).先看第一种这个是返回String的,参数中有@ModelAttribute("user"),在页面中会用到,稍后再说
@RequestMapping(value="login",method=RequestMethod.POST) public String login(@ModelAttribute("user") @Valid User user, BindingResult br){ if(br.hasErrors()){ return "login"; }else{ return "redirect:index.jsp"; } }
(2).第二种,这种同样返回String,但是参数有变化,
public String login(@Valid User user, BindingResult br, ModelMap model){ if(br.hasErrors()){ model.addAttribute("user", user); return "login"; }else{ return "redirect:index.jsp"; } }
(3)第三种,返回值的变化,同样可以改变参数
public ModelAndView login(@ModelAttribute("user") @Valid User user, BindingResult br){ if(br.hasErrors()){ return new ModelAndView("login"); }else{ return new ModelAndView("redirect:index.jsp"); } }
........................看到这,你可能已经看出来其实也没什么,就是使用不同的类型来存放user
3.再看模版中的写法,有两种
(1).一个是bind的方式,这个就是遍历了
<@spring.bind "user.userCode" />
<li><input type="text" name="userCode" value="${spring.status.value?default("")}" /></li>
<#list spring.status.errorMessages as error> <b>${error}</b> <br> </#list>
(2).第二个是输出标签,少写一部分东西
<@spring.formInput "user.userCode" />
<@spring.showErrors "" />
最后。。。。就是你随意组合吧,都可以正常显示结果
刚开始用spring,花了三个多小时才让这个显示出来,就是有个地方没有注意,刚开始进这个页面的时候,user是空的,所以页面会报错,在POST方法中怎么添加user都出错,竟然一直没有注意,真实悲催啊,后来发现之后就很顺畅了,几分钟全部可以测试出来。
可以来个简单的写法,这样就不会出错了,也可以在get方式进这个页面的时候在Model中new一个空的user,完全看个人习惯。
@ModelAttribute("user")
public User getUser() {
return new User();
}