BindingResult未检测到基于JSR:303注释的错误

时间:2014-07-04 12:59:25

标签: java spring validation spring-mvc

我是Spring MVC的新手。我正在尝试一个简单的应用程序来验证表单值。我使用Spring BindingResult和JSR303进行字段验证。但由于某些原因,验证错误不会显示在错误标记中。实际上,绑定结果不会返回任何错误。

我的bean如下:

package com.app.ebl.bean.login;

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


public class LoginBean {

  @NotNull(message = "User Name field can not be blank")
  @Size(max = 10, message = "User Name should not be more than 10 characters")
  private String userName;

  private String password;

  public String getUserName() {
    return userName;
  }

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

  public String getPassword() {
    return password;
  }

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



}

我的控制器类如下所示,

package com.app.ebl.controller.login;

import javax.validation.Valid;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.app.ebl.bean.login.LoginBean;


@Controller
public class LoginController {
  private static final Log log = LogFactory.getLog(LoginController.class);

  @RequestMapping(value="/login", method=RequestMethod.GET)
  public String toLogin(Model model)
  {
    model.addAttribute("login",new LoginBean());
    return "login";
  }

  @RequestMapping(value="/authenticate", method=RequestMethod.POST)
  public String authenticate(@ModelAttribute(value = "login") @Valid LoginBean login,
      BindingResult bindingResult, Model model)
  {

    if(bindingResult.hasErrors()) {
      return "login";
    }

    model.addAttribute("userName",login.getUserName());
    return "home";
  }

}

现在如果我在用户名字段中没有提供任何值,系统不会验证相同的值,并允许我进入下一个视图。

有人可以帮助我。 在此先感谢,

2 个答案:

答案 0 :(得分:1)

@Size注释接受min和max参数。如果未提供min,则使用默认值:

/**
 * @return size the element must be higher or equal to
 */
int min() default 0;

您没有提供任何内容,我的猜测是您的控制器不会将空字符串转换为null。首先,我从@NotBlank切换到org.hibernate.validator注释。除了@NotNull之外,它还删除了尾随空格:

public class LoginBean {

  @NotBlank(message = "User Name field can not be blank")
  @Size(max = 10, message = "User Name should not be more than 10 characters")
  private String userName;
....

此外,在控制器中定义init binder,在StringTrimmerEditor

org.springframework.beans.propertyeditors.StringTrimmerEditor帮助下将空字符串更改为null
@InitBinder
public void initBinder(WebDataBinder binder) {
    binder.registerCustomEditor(String.class, new StringTrimmerEditor(true));
}

答案 1 :(得分:1)

我花了一些时间想出这个,我希望这有助于某人。

我遇到了同样的问题。 bean刚刚没有得到验证。

我所做的是通过“buildpath”菜单创建了一个库,并将hibernate-validator.jar添加到我的库中。我可以使用hibernate注释,但我没有得到任何编译错误,但是当我运行它时,bean从未得到验证。

原因是应用程序需要WEB-INF / lib文件夹中的hibernate-validator.jar,以便它可以使用它进行验证。