Как лучше использовать JSF h: сообщения?
Моя цель - использовать h: сообщения для передачи сообщений об ошибках и подтверждения. Стили CSS для отображения этих двух разных сообщений различны. На самом деле я хотел бы использовать изображение рядом с сообщением подтверждения. для Eg:
<tr> <td><img/></td><td><h:msg></td> </td>.
Итак, я попытался добавить сообщения в контекст Faces на основе двух разных идентификаторов клиентов
<tr>
<td height="5">
<h:messages style="color:darkred" id="error_message" />
</td>
</tr>
<tr>
<td width="89%" class="InfoMsg" align="center">
<h:messages id="confirm_message" />
</td>
</tr>
и в слое java
FacesMessage facesMessage = new FacesMessage(Constants.saveMessageConfirm);
FacesContext.getCurrentInstance().addMessage(Constants.STATIC_CONFIRM_MSG_CLIENT_ID, facesMessage);
Но даже если я добавляю сообщения к идентификатору клиента confirm_message - и только для подтверждения_message - а не к error_message - сообщение отображается дважды в двух разных стилях (см. HTML выше)
2 Вопросы:
1) В чем проблема?
2) Если я хочу показать изображение внутри td во втором tr и условно показать, что второй tr при подтверждении сообщений присутствует - что является лучшим способом?
Спасибо,
Ответы
Ответ 1
h:messages
отображает все сообщения, а также те, которые уже отображаются в h:message
на странице. Однако вы можете настроить отображение только сообщений с идентификатором клиента null
с помощью globalOnly="true"
.
<h:messages globalOnly="true" />
Вы также можете передать сообщение другому стилю в зависимости от FacesMessage.Severity
:
<h:messages infoClass="info" errorClass="error" />
например, с помощью этого CSS, который скрывает сообщения INFO
и делает ERROR
сообщения red:
.info {
display: none;
}
.error {
color: red;
}
Вы можете использовать redisplay="false"
, чтобы он не отображал уже отображаемые сообщения через e.e. <h:message>
.
<h:messages redisplay="false" />
Вам нужно только убедиться, что он помещен в дерево компонентов после всех этих компонентов сообщения. Вы можете при необходимости использовать CSS, чтобы переместить его где-то сверху.
Чтобы быть уверенным,
facesContext.addMessage("clientId", facesMessage);
это приложит данное сообщение к <h:message for="clientId">
не к <h:messages id="clientId">
, как вы, кажется, ожидаете.
Ответ 2
измените <h:messages>
на <h:message>
<h:messages
отображает все сообщения для текущего контекста, <h:message>
отображает определенное сообщение.
и я считаю, что вы хотите изменить id
на for
, чтобы дать ему цель, но я мог ошибаться.
Ответ 3
У нас могут быть разные типы 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>