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();
}




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章