bean validation跟springmvc里不进行验证,BindingResult的errors一直是0

smallblood 2015-03-05 01:40:22
照着官方文档和一大堆教程的配置,但是就是不进行验证,BindingResult的errors一直是0, hibernate-validator-5.1.3.Final.jar 和 validation-api-1.1.0.Final.jar 都导了,也没报错,就是明明我提交的是空信息但是errors一直是0。

web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>

<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>
org.springframework.web.filter.CharacterEncodingFilter
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>


spring-servlet.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<context:component-scan base-package="com.yg.controller"/>
<mvc:annotation-driven/>

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/"/>
<property name="suffix" value=".jsp"/>
</bean>


</beans>


User实体类
package com.yg.entity;

import org.hibernate.validator.constraints.NotBlank;
import org.hibernate.validator.constraints.NotEmpty;

import javax.validation.constraints.NotNull;
import javax.validation.constraints.Null;
import javax.validation.constraints.Size;

/**
* Created by 光 on 2015/3/3.
*/
public class User {
@NotEmpty(message = "不能为空")
private String userName;
@Size(min = 5,max = 12,message = "密码长度为5-12位")
private String password;
private String nickName;


public User() {
}

public User(String userName, String password, String nickName) {
this.userName = userName;
this.password = password;
this.nickName = nickName;
}

public String getUserName() {
return userName;
}

public String getPassword() {
return password;
}

public String getNickName() {
return nickName;
}

public void setUserName(String userName) {
this.userName = userName;
}

public void setPassword(String password) {
this.password = password;
}

public void setNickName(String nickName) {
this.nickName = nickName;
}
}


UserController类
package com.yg.controller;

import com.yg.entity.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.validation.Errors;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import javax.validation.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;

/**
* Created by 光 on 2015/3/3.
*/
@Controller
@RequestMapping("/user")
public class UserController {
private List<User> userList = new ArrayList<User>();

public UserController() {
userList.add(new User("luffy","123","路飞"));
userList.add(new User("nami","123","娜美"));
userList.add(new User("zero","123","索隆"));
userList.add(new User("sanji","123","香吉士"));
}

@RequestMapping("/users")
public String list(Model model){
model.addAttribute("users", userList);
return "/user/list";
}

@RequestMapping(value = "/add",method = RequestMethod.GET)
public String add(Model model){
model.addAttribute(new User());
return "/user/add";
}

@RequestMapping(value = "/add",method = RequestMethod.POST)
public String add(@Validated User user,BindingResult br){
System.out.println(br.getAllErrors().size());
if(br.hasErrors()){
System.out.println("进入");
return "/user/add";
}
userList.add(user);
return "redirect:/user/users";
}
}


添加信息的add.jsp
<%--
Created by IntelliJ IDEA.
User: 光
Date: 2015/3/4
Time: 10:20
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="sf" uri="http://www.springframework.org/tags/form" %>
<html>
<head>
<title>添加用户</title>
</head>
<body>

<sf:form method="post" modelAttribute="user">
<sf:input path="userName" /><sf:errors path="userName"/> <br/>
<sf:password path="password"/><br/>
<sf:input path="nickName"/><br/>
<input type="submit" value="提交">
</sf:form>


</body>
</html>


我整了一天了,也没报错,就是不进行验证,对比了N个教程和官方文档都一样,但是别人的验证,我的没验证,实在没法了,求教啊
...全文
7834 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
junko2013 2017-05-27
  • 打赏
  • 举报
回复
引用 19 楼 dengqui 的回复:
[quote=引用 18 楼 gyf6067 的回复:] 试了一整个上午,终于解决了。 只要将【<mvc:annotation-driven/> 】提至 spring 配置文件的最前面,奇迹出现了!!!
就是这个原因,卧槽,太坑了[/quote] 为什么我提到最前面了还是没用啊
dengqui 2017-05-19
  • 打赏
  • 举报
回复
引用 18 楼 gyf6067 的回复:
试了一整个上午,终于解决了。 只要将【<mvc:annotation-driven/> 】提至 spring 配置文件的最前面,奇迹出现了!!!
就是这个原因,卧槽,太坑了
浪子不再独行 2016-12-16
  • 打赏
  • 举报
回复
试了一整个上午,终于解决了。 只要将【<mvc:annotation-driven/> 】提至 spring 配置文件的最前面,奇迹出现了!!!
qq_35910103 2016-11-22
  • 打赏
  • 举报
回复
是不是使用的是spring4mvc? 如果是的话,不用导入bean-validator.jar 而是导入hibernate-validator-5.3.2.Final中dist目录中的3个jar包以及dist/lib/require中的5个jar包
Wei_V5 2016-09-09
  • 打赏
  • 举报
回复
public String add(HttpServletRequest request, @Valid People people,BindingResult br, MultipartFile file){} public String add(@Valid People people, MultipartFile file, BindingResult br,HttpServletRequest request){} 求解,第一种传参顺序可以校验数据,能跳回到表单页面;第二种传参,如果是校验失败进不了该方法,浏览器直接400错误。 这是为什么
3Jinnnnn 2016-08-04
  • 打赏
  • 举报
回复
把工程的编码改成UTF-8试试,我之前在GBK的编码下怎么修改页面都没有错误信息,改成UTF-8后就有了。。。。。shit
xshirmp 2016-04-29
  • 打赏
  • 举报
回复
使用spring 4.0+的,安装官网配置,没问题
gouldZh 2015-12-29
  • 打赏
  • 举报
回复
可以将UserController类中属性List上,加入@Valid的注解即可
gouldZh 2015-12-29
  • 打赏
  • 举报
回复
楼主 ,请问现在发现问题的原因了吗,我也卡在这里了
  • 打赏
  • 举报
回复
是不是用的tomcat6,Hibernate Valid5.x和tomcat6有点冲突.我用4.3.2就没问题了.
weixin_32073519 2015-11-30
  • 打赏
  • 举报
回复
引用 9 楼 duocairens的回复:
应该是使用了myeclipse2014的原因
是的,我的也是2014 验证不起作用
duocairens 2015-08-08
  • 打赏
  • 举报
回复
应该是使用了myeclipse2014的原因
lorabit_cn 2015-06-03
  • 打赏
  • 举报
回复
添加hibernate-validator-4.3.1.Final.jar
梦起的地方 2015-05-28
  • 打赏
  • 举报
回复
楼主,问一下,你那个问题解决了吗???
豫让_______ 2015-04-08
  • 打赏
  • 举报
回复
验证器 org.springframework.validation.beanvalidation 是这个包里的, <mvc:annotation-driven validator="validator" />通知spring注解的方式注入validator 比如你的@Size @NotEmpty这些就自动注入了 <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"> <property name="validationMessageSource" ref="messageSource" /> </bean> 中间那个property是配置国际化。
lshxqyj1 2015-04-07
  • 打赏
  • 举报
回复
问题解决了么? 通用出现了此问题, jar包配置文件都配好了.就是不校验. 不知道上面问题? 楼主解决了吗? 怎么解决的?
smallblood 2015-03-05
  • 打赏
  • 举报
回复
引用 3 楼 fangmingshijie 的回复:
按说 <mvc:annotation-driven/>会自动注册验证器的,你先手动加上看看。应该是localValidatorFactoryBean这个类,具体的自己搜索下。
加入
 <bean id="validator"
          class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean" />
后报错 异常信息
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping#0': Invocation of init method failed; nested exception is org.springframework.beans.factory.CannotLoadBeanClassException: Error loading class [org.springframework.validation.beanvalidation.LocalValidatorFactoryBean] for bean with name 'validator' defined in ServletContext resource [/WEB-INF/spring-servlet.xml]: problem with class file or dependent class; nested exception is java.lang.NoClassDefFoundError: javax/validation/ValidatorFactory
Related cause: org.springframework.beans.factory.CannotLoadBeanClassException: Error loading class [org.springframework.validation.beanvalidation.LocalValidatorFactoryBean] for bean with name 'validator' defined in ServletContext resource [/WEB-INF/spring-servlet.xml]: problem with class file or dependent class; nested exception is java.lang.NoClassDefFoundError: javax/validation/ValidatorFactory
localValidatorFactoryBean不是spring-context包里的么,为什么会去另一个包查,然后报找不到
  • 打赏
  • 举报
回复
按说 <mvc:annotation-driven/>会自动注册验证器的,你先手动加上看看。应该是localValidatorFactoryBean这个类,具体的自己搜索下。
smallblood 2015-03-05
  • 打赏
  • 举报
回复
引用 1 楼 fangmingshijie 的回复:
@Validated 改为@Valid看下
我试过@Valid ,一样errors是0,而且我也不知道这种注解方式的怎么执行的,找不到源方法,也没法看到底是验证出问题了,还是压根就没去验证
  • 打赏
  • 举报
回复
@Validated 改为@Valid看下

81,090

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧