Другой стиль CSS для сообщений JSF

#jsf #coding-style #richfaces #messages

#jsf #стиль кодирования #richfaces #Сообщение

Вопрос:

В JSF я включил следующую строку в свой файл xhtml:

 <h:panelGroup id="messageHeader">
   <h:messages for="messageHeader" layout="list" errorClass="error"  infoClass="inform"/>
</h:panelGroup>
  

Текст отображается как

 <ul>
  <li class="error"> Please enter a First Name </li>
  <li class="error"> Please enter a Last Name </li>
</ul>
  

Как мне применить стиль CSS к <ul> тегу или какому-либо окружающему <span> тегу?

Вот что я пытаюсь сделать. Я хочу, чтобы все сообщения об ошибках отображались в одном красном поле. Я также хочу, чтобы все информационные сообщения отображались в одном зеленом поле. В приведенном выше примере отображаются 2 красных прямоугольника; по одному для каждого <li> элемента.

Комментарии:

1. Другой вопрос может быть: как я могу получить только сообщения об ошибках?

Ответ №1:

Используйте styleClass атрибут <h:messages> . Он будет применен к родительскому HTML-элементу.

Например.

 <h:messages styleClass="messages" />
  

в конечном итоге будет выглядеть

 <ul class="messages">
    ...
</ul>
  

Обновление: похоже, вы хотите отображать информацию и сообщения об ошибках в отдельных списках. Вместо этого используйте два <h:messages/> , для которых вы скрываете другую серьезность.

 <h:messages styleClass="errorMessages" infoStyle="hide" />
<h:messages styleClass="infoMessages" errorStyle="hide" />
  

с

 .hide {
    display: none;
}
  

Комментарии:

1. @BalusC Но как мне указать стиль для информации и отдельный стиль для сообщений об ошибках?

2. Просто продолжайте использовать errorClass и infoClass , как вы уже делали. styleClass Не будет переопределять это. Вы спрашивали, как установить class вкл <ul> , верно?

3. @BalusC Да, я пытаюсь установить класс на <ul> , но я хочу другой класс, основанный на серьезности сообщений. Теперь я понимаю, что <h:messages ...> это может возвращать сообщения с разными уровнями серьезности. Могу ли я просто получать сообщения для определенного уровня серьезности?

4. Да, это возможно. JSF 1.x или 2.x?

Ответ №2:

Это можно было бы сделать, предоставив тег h: messages для каждого типа сообщения, которое вам нужно показать, с соответствующим условием. Для примера для типа сообщения об ошибке:

 <h:panelGroup id="errorMessageHeader" class="whatever you need" rendered="#{FacesContext.isValidationFailed()}">
   <h:messages for="errorMessageHeader" layout="list" errorClass="error" />
</h:panelGroup>
  

Условия для других типов сообщений вы можете найти, комбинируя методы из

javax.faces.context.FacesContext

Спасибо, A.K.

Комментарии:

1. Я собираюсь попробовать этот метод, но как мне протестировать FaceContext для информационных сообщений?

2. @Ryan: этот пример EL недопустим. Правильный пример зависит от того, используете ли вы JSF 1.x или 2.x и используете ли вы JSP или Facelets. Но, в конце концов, есть более простые способы.

3. @BalusC Благодарю за комментарий. Я не проверял, допустимо ли это, просто хотел показать основную мысль.

4. @Ryan в JSF 1.x или 2.x это можно было бы сделать, сравнив максимальные серьезности (FacesContext.getMaximumSeverity()) вместо этого, но я предлагаю использовать предложение BalusC, поскольку на самом деле это намного проще.