JSF:如何通过Bean验证验证字段并返回错误消息?

7

我有一个联系表单,并且我有一些字段通过Bean验证进行验证,那么在提交后如何返回Bean验证错误消息?

例如:

<h:form>
    <h:inputText id="name" value="#{contact.client.name}"></h:inputText>Name (Required)
    <h:inputText id="email" value="#{contact.client.email}"></h:inputText>E-Mail (Required)
    <h:inputText id="website" value="#{contact.client.website}"></h:inputText>Website (Optional)
    <h:inputText id="text" value="#{contact.client.text}"></h:inputText>Message (Required):

    <h:commandButton value="Send" action="#{contact.sendMessage}" >
        <f:ajax execute="@form" render="@form"/>
    </h:commandButton>

</h:form>

这是我验证字段的方法:
        // Client.java (model)
    @NotNull(message="Please provide your name")
    private String name;

    @NotNull(message="Please provide your email")
    @Pattern(regexp = "([^.@]+)(\\.[^.@]+)*@([^.@]+\\.)+([^.@]+)", message = "Invalid e-mail")
    private String email;

    @Pattern(regexp = "(http[s]?://|ftp://)?(www\\.)?[a-zA-Z0-9-\\.]+\\.([a-zA-Z]{2,5})$", message = "Not valid URL")
    private String website;

    @NotNull(message="Please provide your message")
    private String text;
1个回答

11

使用 <h:message> 标签,通过 for 属性将其附加到特定组件上,for 属性应该引用输入组件的 id:

<h:inputText id="name" value="#{contact.client.name}"></h:inputText>Name (Required)
<h:message for="name" />
<h:inputText id="email" value="#{contact.client.email}"></h:inputText>E-Mail (Required)
<h:message for="email" />
<h:inputText id="website" value="#{contact.client.website}"></h:inputText>Website (Optional)
<h:message for="website" />
<h:inputText id="text" value="#{contact.client.text}"></h:inputText>Message (Required):
<h:message for="text" />

或者使用 <h:messages/> 来将它们全部显示在一个单一的位置:

<h:messages />

是的,Bean Validation消息也以此结束。

不要忘记确保按钮的render属性也覆盖了它们。

另请参阅:


我按照你的教程操作,但是出现了一个奇怪的问题,我已经更新了我的帖子,请您看一下? - Valter Silva
具体问题解决了吗?你的新问题与之无关。看起来更像是一个 CSS 问题。 - BalusC
是的,伙计,谢谢你的帮助。我会检查一下我的CSS。 - Valter Silva
1
在你的教程中提到了,但是为了让@NotNull bean验证器正常工作,需要在web.xml中将javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL设置为context-param。如果有人想知道为什么你的bean验证消息没有出现(就像我一样),这个问题就解决了。 - PDStat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接