JSF: Как проверять поля и возвращать сообщения об ошибках при проверке бина? - PullRequest
7 голосов
/ 08 августа 2011

У меня есть контактная форма, и у меня есть несколько полей, которые проверяются валидацией бина. Как я могу вернуть сообщения об ошибке валидации бина после отправки?

Например:

<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 Ответ

10 голосов
/ 08 августа 2011

Либо используйте <h:message>, который вы прикрепляете к определенным компонентам с помощью атрибута 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 />

Да, сообщения проверки бинов также заканчиваются там.

Не забудьте убедиться, что атрибут кнопки render также охватывает их.

См. Также:

...