spring-mvc整合freemarker并在ftl模版中显示服务端校验的错误信息,JSR303或者JSR349

写法有多种,应该可以任意组合,最重要的是要引入spring.ftl

 

1.Bean里面的就不再多写了,来个简单就可以了

@NotEmpty(message=”用户密码码不可为空”)  或者写在get方法上
private String userPassword;

 

2.Controller里面的写法有几种,看个人习惯

 

(1).先看第一种这个是返回String的,参数中有@ModelAttribute(“user”),在页面中会用到,稍后再说

 

  1. @RequestMapping(value=”login”,method=RequestMethod.POST)
  2.     public String login(@ModelAttribute(“user”) @Valid User user, BindingResult br){
  3.         if(br.hasErrors()){
  4.             return “login”;
  5.         }else{
  6.             return “redirect:index.jsp”;
  7.         }
  8. }

 

 

(2).第二种,这种同样返回String,但是参数有变化,

  1. public String login(@Valid User user, BindingResult br, ModelMap model){
  2.         if(br.hasErrors()){
  3.             model.addAttribute(“user”, user);
  4.             return “login”;
  5.         }else{
  6.             return “redirect:index.jsp”;
  7.         }
  8. }

(3)第三种,返回值的变化,同样可以改变参数

 

  1. public ModelAndView login(@ModelAttribute(“user”) @Valid User user, BindingResult br){
  2.         if(br.hasErrors()){
  3.             return new ModelAndView(“login”);
  4.         }else{
  5.             return new ModelAndView(“redirect:index.jsp”);
  6.         }
  7. }

 

 

……………………看到这,你可能已经看出来其实也没什么,就是使用不同的类型来存放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();
}

标签