使大小验证器忽略 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}$)
.
的正则表达式模式
假设我有一个 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}$)
.