【问题标题】:@Valid (jsr 303) not working in Spring mvc 3.0@Valid (jsr 303) 在 Spring mvc 3.0 中不起作用
【发布时间】:2012-07-02 10:55:28
【问题描述】:

我正在尝试通过使用简单的登录用例在 Spring 3.0 中实现 JSR 303 bean 验证。问题是,如果我提交的表单没有任何值,则验证不会发生(即 BindingResult 方法 hasErrors() 总是返回“false”并打印 我很酷!。以下是代码 sn- p:

@Controller
public class AnnotatedController {
    @RequestMapping(value = "login")
    public String validateLogin(@Valid LoginForm loginForm, BindingResult result, HttpServletRequest request) {
        if(result.hasErrors())
            System.out.println("Got Errors !");
        else
            System.out.println("I'm cool !");
        return "login";
    }
}

bean 看起来像这样:

    public class LoginForm {
    @NotEmpty
    private String userName;
    @Size(min=2, max=3)
    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;
    }
}

终于看到了:

<table>
    <form:form action="login.htm" modelAttribute="loginForm">
        <tr>
            <td>User :</td>
            <td><form:input path="userName" /></td>
        </tr>
        <tr>
            <td>Password :</td>
            <td><form:input path="password" /></td>
        </tr>
        <tr><td><input type="submit" value="Ok"> </tr>
    </form:form>
</table>

我错过了什么?

【问题讨论】:

  • 只是想验证一下——你能否确认一下你是如何配置 Spring-MVC 的,我假设你已经使用了 &lt;mvc:annotation-driven/&gt; 或者你可能已经明确指定了 HandlerAdapter——如果你明确指定了handlerAdapter 您可能还需要明确指定验证器(JSR 303)。
  • @BijuKunjummen 是的,我已经使用 对其进行了配置。还有什么我应该在这里做的吗?
  • 是的,如果你使用的是mvc:annotation-driven,你不需要做任何其他事情。您能否还确认您的类路径中有 JSR 303 实现 - 比如 hibernate-validator jar 文件?
  • @BijuKunjummen 是的,我的 Eclipse Web 应用程序库中有 hibernate-validator-4.3.0.Final.jar 和 validation-api-1.0.0.GA.jar。

标签: java spring-mvc bean-validation


【解决方案1】:

在 servlet 上下文 XML 中添加 &lt;mvc:annotation-driven/&gt;为我解决了这个问题。

【讨论】:

    【解决方案2】:

    你缺少表单错误标签。使用喜欢

    <table>
    <form:form action="login.htm" commandName="logindetails">
        <tr>
            <td>User :</td>
            <td><form:input path="userName" /></td>
            <td><form:errors path="userName" /></td>
        </tr>
        <tr>
            <td>Password :</td>
            <td><form:input path="password" /></td>
            <td><form:errors path="password"  /></td>
        </tr>
        <tr><td><input type="submit" value="Ok"> </tr>
    </form:form>
    

    而且您还必须维护带有错误消息的属性文件。

    NotEmpty.logindetails.userName = userName is required!
    Range.logindetails.password= password value must be between 2 and 3
    

    示例: 点击here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-23
      • 2011-05-10
      • 2011-07-21
      • 2016-01-20
      • 2011-05-16
      • 2018-01-30
      • 2017-09-30
      相关资源
      最近更新 更多