Моя цель - использовать h:messages для передачи пользователю сообщений об ошибках и подтверждениях. Стили CSS для отображения этих двух разных сообщений различны. На самом деле я хотел бы использовать изображение рядом с сообщением подтверждения.
e.g. :
<tr>
<td>
<img/>
</td>
<td>
<h:msg>
</td>
</tr>
Поэтому я попытался добавить сообщения в контекст Faces на основе двух разных идентификаторов клиентов.
FacesMessage facesMessage = new FacesMessage(Constants.saveMessageConfirm);
FacesContext.getCurrentInstance().addMessage(Constants.STATIC_CONFIRM_MSG_CLIENT_ID, facesMessage);
Но даже если я добавляю сообщения в clientId confirm_message - и только в confirm_message - а не в error_message - сообщение отображается дважды в двух разных стилях (см. HTML выше).
2 вопроса:
В чем проблема?
Если я хочу показать изображение внутри td во втором tr и условно показать этот второй tr при наличии подтверждающих сообщений - как лучше всего?
h:messages отображает все сообщения, а также те, которые уже отображаются в h:message на странице. Однако вы можете настроить отображение только сообщений с идентификатором клиента null, используя globalOnly="true".
<h:messages globalOnly="true" />
Вы также можете придать сообщению другой стиль в зависимости от FacesMessage.Severity:
Вы можете использовать redisplay="false", чтобы указать ему не отображать уже отображаемые сообщения через e.e. <h:message>.
<h:messages redisplay="false" />
Вам нужно только убедиться, что он размещен в дереве компонентов после всех остальных компонентов сообщения. При необходимости вы можете использовать CSS, чтобы переместить его куда-нибудь вверх.
это прикрепит данное сообщение к <h:message for="clientId">, а не к <h:messages id="clientId">, как вы ожидаете.
Ответ 2 · рейтинг 5 · Alex Larzelere
изменить <h:messages> на <h:message>
<h:messages отображает все сообщения для текущего контекста, <h:message> отображает конкретное сообщение.
и я полагаю, что вы хотите изменить id на for, чтобы дать ему цель, но я могу ошибаться.
Ответ 3 · рейтинг 1 · sree
У нас могут быть разные типы сообщений h: для разных уровней серьезности. Например, вы можете захотеть отобразить все сообщения об ошибках в красной рамке, а остальные использовать разные стили, такие как желтый для предупреждения и зеленый для информации. Вы также можете обернуть его различными панелями. Вы можете сделать это, используя разные сообщения h: и применяя стили по отдельности.
<!--Displays only Error Messages-->
<h:messages styleClass="mystyle" layout="list" id="msg1" infoStyle="display:none" warnStyle="display:none"></h:messages>
<!--Displays only Warning Messages-->
<h:messages styleClass="messages" layout="list" id="msg2" errorStyle="display:none" infoStyle="display:none"></h:messages>
<!--Displays only Info Messages-->
<h:messages styleClass="messages" layout="list" id="msg2" errorStyle="display:none" warnStyle="display:none"></h:messages>