Подтвердить что ты не робот

JSF и автоматическая перезагрузка xhtml файлов

У меня возникли проблемы с файлами XHTML с горячей перезагрузкой с использованием JRebel, Spring, JSF Mojarra 2.0.3 и WebLogic 10.3.

JRebel перезагружает обычные Java-классы и файлы js/css в /WebContent успешно, но не файлы JSF.xhtml. Полная переиздание было необходимо для обновления файлов xhtml на сервере.

В результате проб и ошибок я, наконец, получил его, добавив некоторые параметры facelets в web.xml и создав пользовательский ResourceResolver, как описано в этом сообщении в блоге.

Однако, мне интересно, ПОЧЕМУ это работает, а точнее:

  • Зачем нужен настраиваемый ResourceResolver?
  • Разве JRebel не должен обрабатывать это путем мониторинга /WebContent, где находятся файлы xhtml?
  • Я предполагаю, что это связано с Facelets/JSF, компилирующим xhtml для сервлетов (?) через FacesServlet, которые JRebel не может обнаружить?
4b9b3361

Ответ 1

Изменения папки JRebel/WebContent.

Проблема в том, что Facelets выполняет кэширование и не перечитывает измененные файлы. Чтобы принудительно перечитать, укажите следующие параметры в web.xml.

JSF 2 (Facelets 2.x):

<!-- Time in seconds that facelets should be checked for changes since last request. A value of -1 disables refresh checking. -->
<context-param>
    <param-name>javax.faces.FACELETS_REFRESH_PERIOD</param-name>
    <param-value>0</param-value>
</context-param>

<!-- Set the project stage to "Development", "UnitTest", "SystemTest", or "Production". -->
<!-- An optional parameter that makes troubleshooting errors much easier. -->
<!-- You should remove this context parameter before deploying to production! -->
<context-param>
    <param-name>javax.faces.PROJECT_STAGE</param-name>
    <param-value>Development</param-value>
</context-param>

Для параметров JSF 1.2 (Facelets 1.x):

<context-param>
    <param-name>facelets.REFRESH_PERIOD</param-name>
    <param-value>0</param-value>
</context-param>
<context-param>
    <param-name>facelets.DEVELOPMENT</param-name>
    <param-value>true</param-value>
</context-param>

Подробнее о параметрах контекста JSF: http://docs.jboss.org/jbossas/6/JSF_Guide/en-US/html/jsf.reference.html#standard.config.params

В вашем случае этот настраиваемый ресивер ресурса не нужен. Этот редактор ресурсов - всего лишь сложный способ получить файлы xhtml из пользовательской папки файловой системы. В вашем случае JRebel делает это (и даже больше).

Ответ 2

Вот как я исправил это для меня:

  • Убедитесь, что плагин facelets включен в настройках JRebel и
  • Убедитесь, что вы используете Project Stage Development в web.xml