#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, поскольку на самом деле это намного проще.