我正在学习bean验证。我创建了简单的表单,其中包含用户名和密码输入字段,这些字段通过支持bean绑定到模型(用户)属性用户名和密码。我用注释标记了它们:
@Id
@NotNull(message="Username cannot be empty")
private String username;
@NotNull(message="Password cannot be empty")
private String password;
现在,在包含该表单的页面上,我将<h:messages/>
放在<h:form>...</h:form>
中。我提交空表单,我被重定向到同一页面(我在支持bean的action方法中返回null)但没有显示消息。我做错了什么?
答案 0 :(得分:1)
解决方案不是使用@NotNull
,而是使用@Size
,因为空输入字段实际上是空字符串而不是null
。
答案 1 :(得分:1)
如果你想让@NotNull
工作,你确实需要让JSF将空字符串设置为null
。在JSF 2.0中,您可以通过将以下上下文参数添加到web.xml
:
<context-param>
<param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name>
<param-value>true</param-value>
</context-param>
我无法从经验中看出这是否会触发@NotNull
,但理论上应该如此。试一试。