JSF页面中的XHTML代码修改在服务器重新启动之前不会反映出来

时间:2012-08-30 18:57:40

标签: jsf facelets hotdeploy

我有一个带有MyFaces实现的JSF 2.0 Web应用程序。该应用程序在Apache Tomcat 7上运行。当我在运行或调试应用程序时对xhtml页面进行任何修改时,没有任何更改反映到页面上。我需要重新启动tomcat才能测试甚至是次要的xhtml修改。这会导致开发过程中的时间浪费。

我想这是一个MyFaces问题,因为当我将标准JSF实现从Mojarra切换到MyFaces时问题就出现了。如何解决这个问题?

1 个答案:

答案 0 :(得分:4)

MyFaces使用与Mojarra不同的Facelet缓存算法,并且更加积极。您需要将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来设置。