【问题标题】:Annotations (bean validation) don´t work注释(bean 验证)不起作用
【发布时间】:2012-08-22 16:55:47
【问题描述】:

我在下面添加了一些注释(bean 验证),但它们不起作用。

@NotNull
@Min(value=3)
private double salario;

@NotNull
@Min(value=5)
@Max(value=19)

private Integer codigo; 
@NotNull
private Date aniversario;

我导入了库:

com.sun.istack.internal.NotNull import;
javax.validation.constraints.Max import;
javax.validation.constraints.Min import;

我的字段未被验证。会是什么?

谢谢!

【问题讨论】:

    标签: java jsf-2 annotations


    【解决方案1】:
    1. 您可能对@NotNull 的导入有误(它应该在javax.validation.constraints 包中)。如果值为null,则其他注释无关紧要。而且由于您的注释错误,因此它们将被允许为 null,除了 double,顺便说一下,@NotNull 没有用,因为 double 总是有一个值。

    2. 您确定您的应用程序中包含验证库吗?我不确定 jsf(无论您使用哪种 impl)是否带有一个。

    您希望在什么时候进行验证?如果这是一个 jsf 托管 bean,它很可能会在设置值阶段结束时进行验证。

    如果它不是 JSF 管理的,那么您很可能必须通过 API 验证自己。

    【讨论】:

    • 马特,我更正了导入,但仍然没有工作。 (导入 javax.validation.constraints.NotNull;)
    • yes 来自 javax.validation.constraints 的注释将被使用。我的印象是它是内置的,但需要将单独的 jar(或通过构建工具)文件添加到项目中。
    【解决方案2】:

    +1 马特。 NotNull 导入来自错误的包。将其更改为javax.validation.constraints.NotNull。此外,只有在类路径中存在 JSr 303 实现时,这才可以开箱即用。来自here

    在存在 bean 验证实现的环境中,JSF 自动验证 UIInput 值引用的 bean 的约束。

    此外,<f:validateBean> 可用于微调 bean 验证行为。例如,validationGroups 属性可用于手动指定在验证特定组件时应考虑哪些验证组:

    <h:inputText value="#{bean.foo}">
      <f:validateBean validationGroups="com.foo.validation.groups.Billable"/>
    </h:inputText>
    

    当验证约束失败时,任何相关的错误消息都会由 JSF 实现自动转换为 FacesMessages,从而将失败传达给最终用户,而不会给应用程序开发人员带来任何负担。

    空字段验证

    在以前的 JSF 版本中,验证器不适用于具有 null/空提交值的 EditableValueHolder 组件。不幸的是,这种行为限制了实际检查空/空值的约束的效用,例如 JSR 303 @NotNull 约束。为了支持@NotNull 和其他类似的约束,JSF 2 改变了空/空值验证的行为。从 JSF 2 开始,当存在 JSR-303 实现时,会验证 null/空值。

    由于这可能会导致不希望看到 null/空值的旧 Validator 实现出现问题,因此可以使用 javax.faces.VALIDATE_EMPTY_FIELDS 上下文参数来禁用此行为。

    【讨论】:

    • Pangea Libraries 已更改,但没有任何反应,不验证 null 字段,也不验证具有 Min 和 Max 值的字段。就好像他没有注释一样。
    【解决方案3】:

    尝试卸载最新的 Android SDK Build-tool。 转到Android SDK manager -> 卸载Android SDK Build-tool。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-20
      • 1970-01-01
      • 2023-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多