【问题标题】:Make Size validator ignore null for optional fields in JSF JPA?让大小验证器忽略 JSF JPA 中可选字段的空值?
【发布时间】:2015-12-01 03:18:24
【问题描述】:

假设我有一个表,其中包含一个名为 player 的文本字段,它是 null ok。 因此允许使用空值,但如果不是空值(有值),则文本/字符串的大小必须在 10 到 100 之间。 我有这个开始:

@Column(name = "player", nullable = true)
@Size(min = 5, max = 100)
private String player;

但是当将该字段设置为 null 时,JSF 页面会引发验证错误。

有没有办法让 Size 验证器忽略空值?

【问题讨论】:

    标签: java validation jsf wildfly bean-validation


    【解决方案1】:

    如果player 字符串为空,那么Size 约束将不会抛出任何异常。当值为 null 时,最好不要抛出错误(NotNull 约束或 NotEmpty 约束除外)。事实上,播放器 bean 的属性值可能是一个空字符串而不是空值,所以约束抛出一个异常,因为当组件中没有输入任何内容时,JSF 会发送一个空字符串。为了让 JSF 发送空值,您必须在 web.xml 文件中添加一些内容,如 Java EE 教程中所述:

    为了使 Bean 验证模型按预期工作,您必须在 Web 部署描述符文件 web.xml 中将上下文参数 javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL 设置为 true:

    <context-param>
        <param-name>
            javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL
        </param-name>
        <param-value>true</param-value>
    </context-param>
    

    如果最终(取决于版本)参数无法按预期工作,请参阅此question 进行故障排除。

    编辑:

    您也可以尝试不应用之前的参数,而是使用具有类似于(^$|^[a-zA-Z]{3,7}$) 的正则表达式模式的Pattern 约束。

    【讨论】:

    • 向你致敬,你成功了@lametaweb (muchas gracias)。该字符串未填充,我的应用程序正在发送一个空字符串,这当然无法通过验证。按照建议添加上下文参数javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL 后 - 它完美无缺。干杯。
    • @Mario Peck,如果对您有帮助,请将答案标记为正确:)
    • 嗨@Mario Peck,如果这个答案解决了您的问题,请点击复选标记考虑accepting it。这向更广泛的社区表明您已经找到了解决方案,并为回答者和您自己赢得了一些声誉。
    • 嗨@Mario Peck,您应该在我的答案旁边看到一个绿色勾号,请修改它。谢谢!
    猜你喜欢
    • 2016-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多