假设我有一个名为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模式。