Что делает ‹h:messages› в JSF?

Я изучаю JSF и наткнулся на эту строку:

<h:messages layout="table"></h:messages>

в примере приложения?

Не уверен, что делает эта строка? У меня нет ошибки при удалении строки из кода, и я могу запустить ее и получить тот же результат?


person bibek    schedule 22.03.2010    source источник
comment
Строка, с которой я столкнулся в примере кода: ‹h:messages layout=table›‹/h:messages›   -  person bibek    schedule 22.03.2010
comment
Я отредактировал ваш вопрос. Используйте сочетание клавиш Ctrl+K, чтобы написать код в вопросе/ответе.   -  person Romain Linsolas    schedule 22.03.2010


Ответы (2)


Тег h:messages отображает все сообщения для текущего представления JSF, которые не покрыты тегом h:message (обратите внимание на отсутствующую букву «s» в конце). Сообщения могут генерироваться явно вашими компонентами поддержки (FacesContext.addMessage) или неявно JSF.

Например. если вы пометили входное значение как обязательное и пользователь отправляет форму, не заполнив требуемое значение, в представление будет добавлено сообщение об ошибке. Если тег h:message привязан к соответствующему компоненту, сообщение будет отображаться там, в противном случае оно будет отображаться с помощью глобального тега h:messages в вашем представлении (если он есть).

Атрибут layout указывает, как должен выглядеть генерируемый HTML-код. Макет table (используемый в вашем примере) использует таблицу HTML для отображения сообщений, а макет list использует маркированный список (тег HTML ul).

Если вы не укажете тег h:messages в своем представлении, а также теги h:message, пользователь не будет проинформирован об ошибках. Поэтому рекомендуется включать тег h:message для каждого компонента ввода вашего представления и тег h:messages для всего представления, чтобы гарантировать, что все сообщения видны пользователю.

Компактный справочник по тегам JSF можно найти на странице JSF Toolbox.

person sven    schedule 22.03.2010
comment
Относительно отображает все сообщения для текущего представления JSF, которые не охвачены. Я не думаю, что это совершенно правильно. Он покажет все сообщения, за исключением случаев, когда вы укажете globalOnly=true. - person Bruno Ranschaert; 11.09.2011

Компоненты <h:message> и <h:messages> предназначены для отображения сообщений пользователям (как правило, сообщений об ошибках).

Например, если у вас есть проверка поля, которая не удалась (например, пользователь не заполнил обязательное поле или ввел строку в числовое поле), то к объекту FacesContext добавляется FacesMessage. Затем <h:message> и <h:messages> используются для отображения сообщения на странице.

Компонент <h:messages> будет отображать все сообщения, содержащиеся в FacesContext, а <h:message> предназначен для определенного clientId (конкретного поля). Последнее полезно, например, когда вы хотите поместить сообщение рядом с полем.

Обратите внимание, что вы можете добавить любое сообщение, которое будет отображаться пользователю:

FacesContext.getInstance().addMessage(null, new FacesMessage("The message to display"));

В этом примере первым параметром является поле идентификатора поля, которое касается этого сообщения (полезно, когда сообщение является сообщением проверки для определенного поля). null означает, что сообщение является общей информацией (т. е. не привязано к какому-либо конкретному полю).

Вы можете увидеть пример этого компонента здесь. Обратите внимание, что в этом примере используется rich:messages, который является расширением (предоставленным RichFaces) «базового» <h:message/>, но принцип тот же.

person Romain Linsolas    schedule 22.03.2010