Как можно контролировать положениев JSF? - PullRequest
2 голосов
/ 14 августа 2011

У меня закончились идеи по этому вопросу, и я был бы признателен за помощь, если это возможно:

У меня на странице xhtml есть следующее:

<h:panelGroup id="globalMesgArea" styleClass="globalMesgArea" layout="block">              
  <h:panelGrid columns="1">
    <h:messages for="globalMesgArea" layout="table" globalOnly="true" infoClass="infMsgs" errorClass="errMsgs"/>
  </h:panelGrid>
</h:panelGroup>           

Я могу расположить содержимое сообщения через определение globalMesgArea StyleClass:

#globalMesgArea {
overflow: auto;
width:800px;
height:50px;
position:absolute;
bottom: 1em;
left:95px;

}

Но (всегда есть но ...), если в моем файле face-config.xml есть ошибка спецификации навигации по страницам, то сообщение об ошибке появляется внизу страницы как <ul> вместо <table>. Кроме того, если я не укажу атрибут «for» в h: messages, тогда ошибка не «появится», но может быть замечена в том же (неправильном) месте в источнике просмотра страницы. Все, что я могу сказать, это .... "Ааааа!" :-)

Фрагмент HTML из источника просмотра страницы:

<ul id="javax_faces_developmentstage_messages" title="Project Stage[Development]: Unhandled Messages"><li style="Color: orange">    Unable to find matching navigation case with from-view-id '/pageSource/myPage.xhtml' for action '/myPage.xhtml' with outcome '/myPage.xhtml' </li></ul></body>

1 Ответ

4 голосов
/ 14 августа 2011

Вы определили свой тег messages с атрибутами for и globalOnly.Согласно документации Facelets для тега messages , эти атрибуты являются взаимоисключающими - если указать значение для атрибута for, то глобальные сообщения (без идентификатора клиента) не будут отображаться внутритело визуализированного тега.Согласно документации, при указании значений для обоих атрибут for имеет приоритет.Ошибка спецификации навигации по страницам не связана с каким-либо идентификатором клиента.Это объяснило бы поведение, изложенное в вашем вопросе:

Кроме того, если я не укажу атрибут «for» в h: messages, тогда ошибка «не появится», но ее можно увидеть вто же самое (неправильное) место в источнике просмотра страницы.

Кроме того, когда на вашем этапе проекта установлено значение «Разработка» вместо «Производство» в web.xml, любые сообщения в FacesContext, которые еще не отображаютсясуществующий тег messages будет отображаться другим тегом messages (с идентификатором "javax_faces_developmentstage_messages" в Мохарре).Кроме того, этот тег messages всегда создается в режиме разработки (даже если нет сообщений для отображения), так как MessagesRenderer записывается для того, чтобы всегда испускать такой тег в фазе визуализации-ответа.

Все теги messages отображаются в виде неупорядоченных списков <ul> в HTML.Именно тег panelgrid на вашей странице создает HTML-таблицы (table) в отображаемом ответе.Это объясняет ваш комментарий:

Если в моем файле face-config.xml есть ошибка спецификации навигации по страницам, то сообщение об ошибке появляется далее вниз по странице как <ul> вместо <table>

Если вы хотите исправить это поведение, вы можете сделать следующее:

  • Установить стадию проекта Production вместо Development.Все необработанные сообщения теперь будут отображаться в журналах сервера.Mojarra больше не будет отображать тег messages с идентификатором javax_faces_developmentstage_messages в ответе, когда он работает в производственном режиме;вместо этого он будет записывать сообщения (с значениями clientId, серьезностью, сводкой и подробностями сообщения) в журналы.
  • Если вы не хотите, чтобы необработанные сообщения появлялись в журналах, что нежелательно, когдавы все еще разрабатываете сайт, тогда на вашей странице может быть тег messages с атрибутом globalOnly, установленным на true;все сообщения, такие как ошибка спецификации навигации по вашей странице, теперь будут появляться в этом теге messages.Вы можете стилизовать этот тег отдельно.У этого подхода есть свои плюсы и минусы:
    • Все ошибки, возникающие в результате разработки (например, отсутствие навигационных спецификаций), теперь будут появляться на вашей странице, если вы не измените стадию проекта на Производство.Поэтому тег messages является избыточным, если на нем больше ничего не отображается.
    • Вы можете последовательно отображать глобальные сообщения, которые не принадлежат ни одному компоненту на ваших страницах.Кроме того, вы можете стилизовать тег messages и его содержимое, используя style / styleClass, infoStyle / infoClass, warnStyle / warnClass, errorStyle / errorClass и fatalStyle``fatalClassАтрибуты.

Кроме того, вы должны рассмотреть возможность использования атрибутов style / styleClass тега messages для стилизации ваших сообщений вместо использования родительских элементов.'стили (которые могут варьироваться от одного содержащего элемента к другому).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...