使大小验证器忽略 JSF JPA 中可选字段的空值?

Make Size validator ignore null for optional fields in JSF JPA?

假设我有一个 Table,其中一个名为 player 的文本字段为 null ok。 所以允许空值,但如果不为空(有值),text/string 的大小必须在 10 到 100 之间。 我有这个开始:

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

但是当将字段设置为 null 时,JSF 页面抛出验证错误。

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

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

In order for the Bean Validation model to work as intended, you must set the context parameter javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL to true in the web deployment descriptor file, web.xml:

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

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

编辑:

您也可以尝试不应用前面的参数,而是使用 Pattern 约束和类似于 (^$|^[a-zA-Z]{3,7}$).

的正则表达式模式