Модификации кода XHTML на страницах JSF не отражаются до перезагрузки сервера

У меня есть веб-приложение JSF 2.0 с реализацией MyFaces. Приложение работает на Apache Tomcat 7. Когда я делаю какие-либо изменения на xhtml страницах во время запуска или отладки приложения, никакие изменения не отражаются на странице. Мне нужно перезапустить tomcat, чтобы протестировать даже незначительные модификации xhtml. Это приводит к потере времени во время разработки.

Я предполагаю, что это проблема MyFaces, потому что проблема началась, когда я переключил стандартную реализацию JSF с Mojarra на MyFaces. Как решить эту проблему?


person enisspahi    schedule 30.08.2012    source источник


Ответы (1)


MyFaces использует другие алгоритмы кэширования Facelet, чем Mojarra, и делает это более агрессивно. Вам нужно установить параметр контекста javax.faces.PROJECT_STAGE в web.xml на Development, чтобы смягчить его.

<context-param>
    <param-name>javax.faces.PROJECT_STAGE</param-name>
    <param-value>Development</param-value>
</context-param>

Обновление: начиная с Mojarra 2.2.11, он будет вести себя одинаково. Таким образом, также на Mojarra вам нужно установить этап Development, чтобы отключить кэширование Facelet. Или же явно установите для параметра контекста javax.faces.FACELETS_REFRESH_PERIOD значение 0.

<context-param>
    <param-name>javax.faces.FACELETS_REFRESH_PERIOD</param-name>
    <param-value>0</param-value>
</context-param>

Значение 0 означает «никогда не кэшировать». Любое отрицательное значение, такое как -1, означает «бесконечное кэширование». Любое положительное значение, такое как 10, представляет количество секунд для кэширования.

Не забудьте снова включить кэширование для производства. Стадия проекта более полезна, поскольку ее также можно установить через JNDI, а не через web.xml.

person BalusC    schedule 30.08.2012