JSF и автоматическая перезагрузка файлов xhtml - PullRequest
24 голосов
/ 22 сентября 2011

У меня были некоторые проблемы с горячей перезагрузкой файлов 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 не может обнаружить?

Ответы [ 2 ]

42 голосов
/ 22 сентября 2011

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 делает это (и даже больше).

1 голос
/ 29 марта 2014

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

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