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

  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. Snmp学习总结(六)——linux下安装和配置SNMP

    一.安装SNMP 1.1.下载Net-SNMP的源代码 选择一个SNMP版本,比如5.7.1,下载地址如下:http://sourceforge.net/projects/net-snmp/files ...

  2. python测试开发django-26.表单提交之post登录案例

    前言 注册和登录功能实现都是post请求接口,只不过注册是往数据库插入数据,登录是从数据库里面查询数据. 本篇接着上一篇写个简单的登录页面请求,用户注册时密码加密存储,用户登录时候对输入的密码校验. ...

  3. 每天一个linux命令-tai命令

    动态监视文件尾部. 命令参数: -f 循环读取 -q 不显示处理信息 -v 显示详细的处理信息 -c<数目> 显示的字节数 -n<行数> 显示行数 --pid=PID 与-f合 ...

  4. 加州靡情第一至七季/全集Californication迅雷下载

    加州靡情 第一至七季 Californication Season 1-7 (2007-2014)本季看点:2007-2014,7季,84集.电视圈一直有个怪现象,有许多演员在非常成功剧集完结之后,反 ...

  5. 数据更新后让ListView自动滚动到底部

    在做聊天界面的时候想要发送新的数据后,listview自动滚动到底部,显示出最新的数据.网上找了两个方法,觉得不错,记录一下. 方法一: 给listview添加下面两个属性 android:stack ...

  6. Mysql 编译安装并使用自定义用户启动

    本文基于 Redhat Linux 6.7 的环境,Mysql 版本为 5.5.37 安装前的检查 必备的组件,如果没有使用 yum 进行安装,可以使用网上的源,也可以使用本地光盘作为 Yum 源. ...

  7. Java命令学习系列(四)——jstat

    jstat(JVM Statistics Monitoring Tool)是用于监控虚拟机各种运行状态信息的命令行工具.他可以显示本地或远程虚拟机进程中的类装载.内存.垃圾收集.JIT编译等运行数据, ...

  8. [转]PHP用mysql数据库存储session

    From : http://www.php100.com/html/webkaifa/PHP/PHPyingyong/2010/0226/4002.html 大部分使用php的人一旦应用到sessio ...

  9. Eclipse Debug提示source not found解决方案

    场景:我在引用的jar包的某个class文件的某一行代码打了个断点,当然我是已经指定了source源码包路径,否则我是查看不了class文件的源码更不用说打断点了,但是在debug模式下,却提示&qu ...

  10. Swift:宏定义

    一.简述 swift中并没有加入宏系统,C语言使用#define定义的基本常量在导入Swift时被Swift编译自动转为Swfit语言的全局变量.但复杂的宏定义不能被Swift转换.Swift中类似宏 ...