使Size验证器忽略JSF JPA中可选字段的null



假设我有一个名为player的文本字段的表,该字段为空。所以允许为空,但如果不是空(有值),则文本/字符串的大小必须在10到100之间。我有这个开始:

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

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

是否有一种方法可以使Size验证器忽略null ?

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

为了使Bean验证模型按预期工作,必须设置上下文参数javax.faces。web.xml:

将web部署描述符文件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>

如果最终(取决于版本)该参数没有按预期工作,请参阅此问题以进行故障排除。

编辑:

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

最新更新