enisspahi
enisspahi

Reputation: 31

XHTML code modifications in JSF pages not reflected until server restart

I have a JSF 2.0 Web Application with MyFaces implementation. The application runs on Apache Tomcat 7. When I do any modification on xhtml pages while I am running or debugging the application no changes reflect to the page. I need to restart tomcat in order to test even minor xhtml modifications. This causes loose of time during development.

I guess this is a MyFaces problem, because the problem started when I switched standard JSF implementation from Mojarra to MyFaces. How can this problem be solved?

Upvotes: 3

Views: 1523

Answers (1)

BalusC
BalusC

Reputation: 1109262

MyFaces uses different Facelet caching algorithms than Mojarra and does it more agressively. You need to set the javax.faces.PROJECT_STAGE context parameter in web.xml to Development to tone it down.

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

Update: since Mojarra 2.2.11, it will behave the same. So, also on Mojarra, you'd need to set Development stage to turn off Facelet caching. Alternatively, explicitly set the javax.faces.FACELETS_REFRESH_PERIOD context parameter to 0.

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

A value of 0 means "never cache". Any negative value such as -1 means "cache infinitely". Any positive value such as 10 represents the amount of seconds to cache.

Don't forget to re-enable caching for production. The project stage is more useful as it can also be set via JNDI instead of via web.xml.

Upvotes: 4

Related Questions