2010-05-28 3 views
14

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

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

Так что я пытался добавить сообщения в контексте Faces на основе 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); 

Но, даже если я добавляю сообщения к идентификатору клиента confirm_message - и только для подтверждения_message - а не к error_message - сообщение отображается дважды в двух разных стилях (см. HTML выше)

2 Вопросы:

1) В чем проблема?

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

Спасибо,

ответ

40

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", чтобы сообщить, что он не отображает уже отображаемые сообщения через ee <h:message>.

<h:messages redisplay="false" /> 

Вам нужно только убедиться, что он помещается в дереве компонентов после всех этих других компонентов сообщения. Вы можете при необходимости использовать CSS, чтобы переместить его где-то сверху.

Просто, чтобы быть уверенным,

facesContext.addMessage("clientId", facesMessage); 

это будет присоединять данное сообщение к <h:message for="clientId"> не к <h:messages id="clientId">, как вы, кажется, ожидать.

+0

Я разместил вопрос относительно вашего первого заявления в этом посте. Вы можете взглянуть, пожалуйста? [Здесь это] (http://stackoverflow.com/questions/10598549/icemessages-hmessages-showing-messages-which-are-already-displayed-in-a-comp). –

+0

@ thisis: Извините, мое заявление было действительно ошибочным. Никто не идеален :) Пожалуйста, обновите свой вопрос. Я обновил этот и другой ответ. Спасибо, что проснулись. – BalusC

+0

BlausC, ты потрясающий. Как вы узнали, что у него может быть только один дочерний элемент? – ggb667

4

изменения <h:messages> к <h:message>

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

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

0

У нас могут быть разные типы сообщений 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> 
Смежные вопросы