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

В 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> элемента.


person Ryan    schedule 11.05.2011    source источник
comment
Другой вопрос может быть: как я могу получить только сообщения об ошибках?   -  person Ryan    schedule 11.05.2011


Ответы (2)


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

E.g.

<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;
}
person BalusC    schedule 11.05.2011
comment
@BalusC Но как указать стиль для информации и отдельный стиль для сообщений об ошибках? - person Ryan; 11.05.2011
comment
Просто продолжайте использовать errorClass и infoClass, как вы уже делали. styleClass не переопределит его. Вы спрашивали, как установить class на <ul>, верно? - person BalusC; 11.05.2011
comment
@BalusC Да, я пытаюсь установить класс <ul>, но мне нужен другой класс в зависимости от серьезности сообщений. Теперь я понимаю, что <h:messages ...> может возвращать сообщения с разным уровнем серьезности. Могу ли я просто получать сообщения для указанного уровня серьезности? - person Ryan; 11.05.2011
comment
Да, это возможно. JSF 1.x или 2.x? - person BalusC; 11.05.2011

Это можно сделать, предоставив тег 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

Спасибо, А.К.

person A. K.    schedule 11.05.2011
comment
Я собираюсь попробовать эту технику, но как мне протестировать FaceContext для информационных сообщений? - person Ryan; 11.05.2011
comment
@Ryan: этот пример EL недействителен. Правильный пример зависит от того, используете ли вы JSF 1.x или 2.x и используете ли вы JSP или Facelets. Но ведь есть и более простые способы. - person BalusC; 11.05.2011
comment
@BalusC Спасибо за комментарий. Я не проверял, действительно ли это, просто хотел показать главное. - person A. K.; 11.05.2011
comment
@Ryan в JSF 1.x или 2.x это можно было бы сделать, сравнив максимальные строгости (FacesContext.getMaximumSeverity()), но я предлагаю использовать предложение BalusC, так как на самом деле это намного проще. - person A. K.; 11.05.2011