SpringMVC和FreeMarker整合Hibernate-validator在页面渲染校验错误信息
2018-01-30 11:45
597 查看
1、整合背景
项目中使用了SpringMVC整合FreeMarker作为页面渲染,在后台管理端页面存在大量的form输入项,每个输入项在提交到Controller层时都需要对数据的有效性进行校验,工作量非常大而且繁琐。
2、校验框架
为了解决数据校验的问题,调研了一下Hibernate-validator,发现该框架功能非常的全面,能很好的解决我遇到的数据校验问题,官方文档:https://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_single/#validator-gettingstarted-createproject
Hibernate-validator 的优势:
支持校验规则分组
支持国际化错误消息
支持错误的fail-fast模式:https://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_single/#section-fail-fast
支持自定义校验注解
3、校验依赖包
4、示例代码
UserDemoDO .java
UserDemoController .java
5、FreeeMarker 页面
6、校验效果
7、解析错误信息的核心源代码
org.springframework.web.servlet.support.BindStatus
8、参考文章:
http://yunzhu.iteye.com/blog/2088548
http://hualong.iteye.com/blog/2038092
http://blog.csdn.net/fengyong7723131/article/details/54668905
PDF 文档下载:https://pan.baidu.com/s/1htA4BAG
有问题欢迎加qq:787141854 交流
项目中使用了SpringMVC整合FreeMarker作为页面渲染,在后台管理端页面存在大量的form输入项,每个输入项在提交到Controller层时都需要对数据的有效性进行校验,工作量非常大而且繁琐。
2、校验框架
为了解决数据校验的问题,调研了一下Hibernate-validator,发现该框架功能非常的全面,能很好的解决我遇到的数据校验问题,官方文档:https://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_single/#validator-gettingstarted-createproject
Hibernate-validator 的优势:
支持校验规则分组
支持国际化错误消息
支持错误的fail-fast模式:https://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_single/#section-fail-fast
支持自定义校验注解
3、校验依赖包
<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>5.3.5.Final</version> </dependency> <dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> <version>1.1.0.Final</version> </dependency>
4、示例代码
UserDemoDO .java
import com.jd.jdpetrol.dao.enums.YNEnum; import org.apache.ibatis.type.Alias; import org.hibernate.validator.constraints.NotBlank; import javax.validation.constraints.NotNull; @Alias("UserDemoDO") public class UserDemoDO { @NotNull private Long id; @NotBlank private String name; private YNEnum yn; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public YNEnum getYn() { return yn; } public void setYn(YNEnum yn) { this.yn = yn; } @Override public String toString() { final StringBuffer sb = new StringBuffer("UserDemo{"); sb.append("id=").append(id); sb.append(", name='").append(name).append('\''); sb.append('}'); return sb.toString(); } public static void main(String[] args) { String str = "/abc"; if (str.startsWith("/")) { System.out.println(str.substring(1)); } } } import java.util.HashMap; import java.util.Map; /** * Created by XFrame on 2016/1/29. */ public enum YNEnum { VALID(1, "有效"), INVALID(0, "无效"); YNEnum(Integer code, String desc) { this.code = code; this.desc = desc; } private Integer code; private String desc; private static Map<Integer, YNEnum> map = new HashMap<Integer, YNEnum>(); static { for (YNEnum ele : values()) { map.put(ele.code, ele); } } public static YNEnum getByCode(Integer code) { return map.get(code); } public Integer getCode() { return code; } public String getDesc() { return desc; } }
UserDemoController .java
@Controller @RequestMapping("/demo") public class UserDemoController { @RequestMapping("/user2") public String index(ModelMap model) {//UserDemoDO userVo UserDemoDO userVo = new UserDemoDO(); model.addAttribute("userDemoDO", userVo); return "userdemo/user2"; } @RequestMapping(value = "/user", method = POST) //@ResponseBody public ModelAndView addUser(@Validated UserDemoDO user, BindingResult br) { ModelAndView modelView = new ModelAndView(); modelView.setViewName("userdemo/user2"); //基础校验 if (br.hasErrors()) { return modelView; } user.setYn(YNEnum.VALID); //userDemoService.save(user); return modelView; } }
5、FreeeMarker 页面
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>user demo</title> <style> .outer { margin-top: 20px; } </style> </head> <body> <#import "/spring.ftl" as spring/> <div class="outer"> <form action="/demo/user/" name="user" method="post"> <@spring.bind "userDemoDO.id" /> 用户Id:<input type="text" id="id" name="id"/> <br/> <@spring.showErrors "<br>"/> 用户名:<input type="text" id="name" name="name"/> <br/> <input type="submit" value="提交"> <br> <#if userDemoDO??> <@spring.bind "userDemoDO.id" /> <#--<@spring.showErrors "<br>"/>--> <@spring.bind "userDemoDO.name" /> <#list spring.status.errorMessages as error> <b>${error}</b> <br> </#list> <br>****************11****************<br> <@spring.bind "userDemoDO.*" /> <@spring.showErrors "<br>"/> </#if> -------------------- <br> <br> =====================333======================== </form> </div> </body> </html>
6、校验效果
7、解析错误信息的核心源代码
org.springframework.web.servlet.support.BindStatus
8、参考文章:
http://yunzhu.iteye.com/blog/2088548
http://hualong.iteye.com/blog/2038092
http://blog.csdn.net/fengyong7723131/article/details/54668905
PDF 文档下载:https://pan.baidu.com/s/1htA4BAG
有问题欢迎加qq:787141854 交流
相关文章推荐
- SpringMVC+HibernateValidator,配置在properties文件中的错误信息回显前端页面出现中文乱码
- SpringMVC+HibernateValidator,配置在properties文件中的错误信息回显前端页面出现中文乱码
- SpringMVC+HibernateValidator,配置在properties文件中的错误信息回显前端页面出现中文乱码
- SpringMVC整合Hibernate Validator验证方法与js校验
- spring-mvc整合freemarker并在ftl模版中显示服务端校验的错误信息,JSR303或者JSR349
- spring-mvc整合freemarker并在ftl模版中显示服务端校验的错误信息,JSR303或者JSR349
- spring boot里增加表单验证hibernate-validator并在freemarker模板里显示错误信息(推荐)
- springMVC校验之hibernate validator校验器的使用
- 整合Spring MVC,mybatis,hibernate,freemarker框架实现的自定义注解Validator验证机制实现对敏感词过滤的代码分享
- 整合Spring MVC,mybatis,hibernate,freemarker框架实现的自定义注解Validator验证机制实现对敏感词过滤的代码分享
- 整合Spring MVC,mybatis,hibernate,freemarker框架实现的自定义注解Validator验证机制实现对敏感词过滤的代码分享
- springmvc校验,错误信息显示及数据回显
- springMVC国际化实现,页面获取错误信息properties中信息
- 基于Annotation的SpringMVC4整合Hibernate4 + freemarker
- SpringMVC+HibernateValidator,读取在properties文件中的错误提示信息为乱码
- SpringMVC结合Validation api 和Hibernate validation进行校验不提示验证错误信息
- SpringMVC集成Hibernate Validator进行参数校验
- SpringMVC-Spring-Hibernate项目搭建之三-- freemarker & 静态资源整合
- 整合Spring MVC,mybatis,hibernate,freemarker框架实现的自定义注解Validator验证机制实现对敏感词过滤的代码分享
- [spring] springmvc 整合freemarker 出现版本错误