2

我有一个带有 MyFaces 实现的 JSF 2.0 Web 应用程序。该应用程序在 Apache Tomcat 7 上运行。当我xhtml在运行或调试应用程序时对页面进行任何修改时,不会对页面进行任何更改。我需要重新启动 tomcat 以测试即使是很小的 xhtml 修改。这会导致开发过程中的时间松散。

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

4

1 回答 1

4

MyFaces 使用与 Mojarra 不同的 Facelet 缓存算法,并且更加激进。您需要将javax.faces.PROJECT_STAGEcontext 参数设置为web.xmltoDevelopment以将其调低。

<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 而不是 via 设置web.xml

于 2012-08-30T21:30:57.440 回答