【问题标题】:JSF Bean Validation Constraints don't have any effectJSF Bean Validation Constraints 没有任何作用
【发布时间】:2012-03-28 22:03:12
【问题描述】:

我无法让 Java Bean Validation (JSR-303) 正常工作。它不会给出任何错误并处理 action 方法。我在“name”inputText 中添加了一个字符,它接受并执行 process() 方法(不适用大小注释)。

当我放一个字符时,我希望 My.Process() 方法不会被执行,我说的不对吗? 是否有任何我忽略的配置才能使验证正常工作?

在我的项目的 WEB-INF/lib 目录中,我有 validation-api-1.0.0.GA.jarhibernate-validator-4.2.0.Final.jar强>.
应用服务器:Tomcat 7.0.25(在 Tomcat 的 Lib 文件夹中,我有 myfaces-api-2.1.5.jarmyfaces-impl-2.1.5.jar )。
IDE:Eclipse Helios SR2

我从控制台收到消息“INFO:MyFaces Bean Validation support disabled”,但我有我指定的罐子。

豆子

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.validation.constraints.Size;

@ManagedBean(name="my")
@RequestScoped
public class MyBean implements Serializable {
  @Size(min=3, message="ERROR")
  private String name;

  public String process() {...}

  ...getters, setters, etc...
}

JSF 表单

<h:form>
    <h:messages />
    <h:inputText value="#{my.name}" />
    <h:commandButton value="Save" action="#{my.process}" />
</h:form>

我也试过了:
@NotEmpty,@NotBlank,
@org.hibernate.validator.constraints.Length(min=3, message="ERROR")
但它们也不起作用。

【问题讨论】:

  • 您的代码在我的环境中工作(GF 3.1.1,Mojarra 2.1.3)。除了 Glassfish (Java EE6 bean-validation.jar) 之外,我没有其他验证 api。
  • 好吧,我实际上在写到这里之前简化了我的代码,但是这个精确的简化版本在我上面指定的环境中也不适用于我。我真的厌倦了试图找出问题所在。这没有任何意义吗?我阅读了几十个关于 jsf bean 验证的网页,根据所有这些网页,它应该可以工作......
  • 我在控制台收到以下消息,我试图找出它为什么这么说。我有上面指定的罐子。 “信息:MyFaces Bean 验证支持已禁用”
  • 哈哈成功了!我从某个地方下载了“bean-validator.jar”并将其放入我的类路径中,现在启用了 bean 验证,它也可以工作:) 感谢您指出 jar 文件马特!但是这个jar没有与bean验证相关的信息真的很奇怪。我什至找不到关于 jar 属于哪个项目的正确信息。
  • 我调查了 bean-validator.jar,它看起来像是 validation-api.jar 和 hibernate-validator-4.0.2-GA.jar 的组合所以我删除了它,现在验证仍然有效!我有时害怕永远不会完全理解 java :)

标签: java jsf bean-validation


【解决方案1】:

谢谢!仅供参考,bean-validator 的 Maven 坐标:

<dependency>
        <groupId>org.glassfish</groupId>
        <artifactId>bean-validator</artifactId>
        <version>3.0-JBoss-4.0.2_03</version>
</dependency>

【讨论】:

    【解决方案2】:

    我想写一个可能的问题。

    当我有这个变量时

    private String Name;
    

    验证不起作用,因为 getter 和 setter 是这样的

    private String getName(){}
    

    所以我把名字改成了

    private String name;
    

    它开始验证:)

    可能这就是问题所在。

    猜你喜欢
    • 2011-12-28
    • 2011-11-24
    • 1970-01-01
    • 2017-12-02
    • 2017-04-18
    • 2012-04-30
    • 2016-06-19
    • 2020-10-13
    • 1970-01-01
    相关资源
    最近更新 更多