Я изучаю JSF и наткнулся на эту строку:
<h:messages layout="table"></h:messages>
в примере приложения?
Не уверен, что делает эта строка? У меня нет ошибки при удалении строки из кода, и я могу запустить ее и получить тот же результат?
Я изучаю JSF и наткнулся на эту строку:
<h:messages layout="table"></h:messages>
в примере приложения?
Не уверен, что делает эта строка? У меня нет ошибки при удалении строки из кода, и я могу запустить ее и получить тот же результат?
Тег 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.
Компоненты <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/>
, но принцип тот же.