先创建一个实体类,后续的验证都基于这个实体类:

  1. public class Goods {
  2.  
  3. private String goodsName;
  4. private String city;
  5. private int amount;
  6.  
  7. public String getGoodsName() {
  8. return goodsName;
  9. }
  10. public void setGoodsName(String goodsName) {
  11. this.goodsName = goodsName;
  12. }
  13. public String getCity() {
  14. return city;
  15. }
  16. public void setCity(String city) {
  17. this.city = city;
  18. }
  19. public int getAmount() {
  20. return amount;
  21. }
  22. public void setAmount(int amount) {
  23. this.amount = amount;
  24. }
  25.  
  26. }

表单页面的controller方法:

  1. @RequestMapping("/test1")
  2. public String test1(Model model) {
  3. Goods goods = new Goods();
  4. goods.setGoodsName("联想电脑");
  5. goods.setCity("北京");
  6. goods.setAmount(10);
  7. model.addAttribute("goods",goods);
  8.  
  9. return "/test1";
  10. }

表单jsp页面

test1.jsp:

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
  4. <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
  5. <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
  6. <%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
  7. <html>
  8. <head>
  9. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  10. <title>test1</title>
  11. </head>
  12. <body>
  13. <form:form modelAttribute="goods" method="post" action="test2">
  14. <form:input path="goodsName" />
  15. <form:errors path="goodsName"></form:errors>
  16. <br />
  17. <c:set var="citys" value="北京,上海,广州" />
  18. <c:set var="cityList" value="${fn:split(citys,',') }" />
  19. <form:select path="city">
  20. <form:option value="">请选择</form:option>
  21. <form:options items="${cityList }" />
  22. </form:select>
  23. <form:errors path="city"></form:errors>
  24. <br />
  25. <form:button>提交</form:button>
  26. </form:form>
  27. </body>
  28. </html>

提交表单的controller:

  1. @InitBinder
  2. public void initBinder(DataBinder binder) {
  3. binder.setValidator(new Validator() {
  4.  
  5. @Override
  6. public void validate(Object target, Errors errors) {
  7. ValidationUtils.rejectIfEmpty(errors, "goodsName", null, "商品名称不能为空");
  8. ValidationUtils.rejectIfEmpty(errors, "city", null, "城市不能为空");
  9.  
  10. Goods goods = (Goods) target;
  11. if(goods.getGoodsName().length()<4) {
  12. errors.rejectValue("goodsName", null, "商品名称不能少于4个字符");
  13. }
  14. }
  15.  
  16. @Override
  17. public boolean supports(Class<?> clazz) {
  18.  
  19. return Goods.class.equals(clazz);
  20. }
  21. });
  22. }
  23.  
  24. @RequestMapping(value="/test2",method=RequestMethod.POST)
  25. public String test2(@Validated Goods goods,Errors errors,BindingResult result) {
  26. if(errors.hasErrors()) {
  27. return "/test1";
  28. } else {
  29. return "/test2";
  30. }
  31. }

通过@InitBinder注解的方法,会在test2方法前执行,如果检查出了错误,会在test2方法里通过errors.hasErrors()方法判断

Spring MVC中使用errors标签的更多相关文章

  1. spring mvc中使用freemark的一点心得

    参考文档: FreeMarker标签与使用 连接http://blog.csdn.net/nengyu/article/details/6829244 freemarker学习笔记--指令参考: ht ...

  2. Http请求中Content-Type讲解以及在Spring MVC中的应用

    引言: 在Http请求中,我们每天都在使用Content-type来指定不同格式的请求信息,但是却很少有人去全面了解content-type中允许的值有多少,这里将讲解Content-Type的可用值 ...

  3. Spring MVC中处理静态资源的多种方法

    处理静态资源,我想这可能是框架搭建完成之后Web开发的”头等大事“了. 因为一个网站的显示肯定会依赖各种资源:脚本.图片等,那么问题来了,如何在页面中请求这些静态资源呢? 还记得Spring MVC中 ...

  4. Spring MVC 中的基于注解的 Controller【转】

    原文地址:http://my.oschina.net/abian/blog/128028 终于来到了基于注解的 Spring MVC 了.之前我们所讲到的 handler,需要根据 url 并通过 H ...

  5. Spring MVC中基于注解的 Controller

         终于来到了基于注解的 Spring MVC 了.之前我们所讲到的 handler,需要根据 url 并通过 HandlerMapping 来映射出相应的 handler 并调用相应的方法以响 ...

  6. Http请求中Content-Type讲解以及在Spring MVC中的应用【转】

    完全引用自: http://blog.csdn.net/blueheart20/article/details/45174399#t1   此文讲得很清晰,赞! 引言: 在Http请求中,我们每天都在 ...

  7. Http请求中Content-Type和Accept讲解以及在Spring MVC中的应用

    在Http请求中,我们每天都在使用Content-type来指定不同格式的请求信息,但是却很少有人去全面了解content-type中允许的值有多少,这里将讲解Content-Type的可用值,以及在 ...

  8. [转]Http请求中Content-Type讲解以及在Spring MVC中的应用

    本文转自:http://blog.csdn.net/blueheart20/article/details/45174399 引言: 在Http请求中,我们每天都在使用Content-type来指定不 ...

  9. Spring MVC 中的基于注解的 Controller(转载)

           终于来到了基于注解的 Spring MVC 了.之前我们所讲到的 handler,需要根据 url 并通过 HandlerMapping 来映射出相应的 handler 并调用相应的方法 ...

随机推荐

  1. 解决SQL Server 2008提示评估期已过

    第一步:进入SQL2008配置工具中的安装中心第二步:再进入维护界面,选择版本升级第三步:进入产品密钥,输入密钥第四步:一直点下一步,直到升级完毕.SQL Server 2008 Developer: ...

  2. byte[]数组的正则表达式搜索 z

    在byte[]数组的特定位置进行正则表达式匹配. 为了从硬盘上搜索特定类型的文件,需要根据文件的特征值进行匹配. 对于已掌握文件结构的文件,采用hard-code的方式进行匹配:这样速度快: 对于未掌 ...

  3. oracle exp/imp命令详解

    E:\>exp help=y 通过输入 EXP 命令和用户名/口令,您可以 在用户 / 口令之后的命令: 实例: EXP SCOTT/TIGER 或者,您也可以通过输入跟有各种参数的 EXP 命 ...

  4. poj 3041(最大匹配问题)

    http://poj.org/problem?id=3041 Asteroids Time Limit: 1000MS   Memory Limit: 65536K Total Submissions ...

  5. 清除和新建WordPress数据库

    由于在本地已经安装过一次wordpress.所以假设第二次安装的时候 localhost/wp-admin/install.php 会显示你已经安装过了.所以须要把MySQL的数据库信息清除掉,或者另 ...

  6. WebRTC 基于GCC的拥塞控制(上)

    转自:http://blog.csdn.net/doitsjz/article/details/56481981 实时流媒体应用的最大特点是实时性,而延迟是实时性的最大敌人.从媒体收发端来讲,媒体数据 ...

  7. CentOS 7 修改时区

    转自:http://blog.csdn.net/robertsong2004/article/details/42268701 本文转载至:http://mathslinux.org/?p=637 L ...

  8. 真实的人类第三季/全集Humans迅雷下载

    Channel 4及AMC宣布续订<真实的人类 Humans>第三季,下季为8集:新季拍摄将在秋季开始,主要角色会回归.该剧设定在机器人Synth被繁忙都市人广泛使用的世界,呈现人类与机器 ...

  9. bat调用TexturePacker更新SpriteSheet

    一款游戏会用到很多图片资源,通常我们会使用TexturePacker工具进行图片的拼接.压缩,为了考虑性能问题,单个SpriteSheet的尺寸不会设置的太大(最大1024 * 1024),这样就可能 ...

  10. Asp.Net 获取物理路径

    一.AppDomain 1.AppDomin获取当前前程序域目录 2.不需要请求上线文实例,例如在Global.ascx中访问等 //网站物理目录 AppDomain.CurrentDomain.Ba ...