Как лучше использовать JSF h: messages? - PullRequest
15 голосов
/ 28 мая 2010

Моя цель - использовать h: messages для передачи пользователю сообщения об ошибках и подтверждении. Стили CSS для отображения этих двух разных сообщений различны. На самом деле я хотел бы использовать изображение рядом с сообщением подтверждения. например:

<tr> <td><img/></td><td><h:msg></td> </td>.

Поэтому я попытался добавить сообщения в Faces Context на основе 2 разных идентификаторов клиента

<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);

Но, даже если я добавляю сообщения в Id клиента Id verify_message - и только в verify_message - а не в error_message - сообщение отображается дважды в 2 разных стилях (см. HTML выше)

2 вопроса:

1) В чем здесь проблема?

2) Если я хочу показать изображение внутри td во втором tr и условно показать, что второе tr при наличии подтверждающих сообщений - каков наилучший способ?

Спасибо

Ответы [ 3 ]

41 голосов
/ 28 мая 2010

h:messages отображает все сообщения, а также те, которые уже отображаются в h:message на странице. Однако вы можете установить на только отображение сообщений с null идентификатором клиента, используя globalOnly="true".

<h:messages globalOnly="true" />

Вы также можете придать сообщению другой стиль в зависимости от FacesMessage.Severity:

<h:messages infoClass="info" errorClass="error" />

например, с этим CSS, который скрывает сообщения INFO и делает ERROR сообщения красным:

.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">, как вы, вероятно, ожидаете.

4 голосов
/ 28 мая 2010

изменить <h:messages> на <h:message>

<h:messages отображает все сообщения для текущего контекста, <h:message> отображает конкретное сообщение.

и я считаю, что вы хотите изменить id на for, чтобы поставить ему цель, но я могу ошибаться.

1 голос
/ 10 января 2014

У нас могут быть разные типы 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...