我有一个带有 MyFaces 实现的 JSF 2.0 Web 应用程序。该应用程序在 Apache Tomcat 7 上运行。当我xhtml
在运行或调试应用程序时对页面进行任何修改时,不会对页面进行任何更改。我需要重新启动 tomcat 以测试即使是很小的 xhtml 修改。这会导致开发过程中的时间松散。
我想这是一个 MyFaces 问题,因为当我将标准 JSF 实现从 Mojarra 切换到 MyFaces 时,问题就开始了。如何解决这个问题?
MyFaces 使用与 Mojarra 不同的 Facelet 缓存算法,并且更加激进。您需要将javax.faces.PROJECT_STAGE
context 参数设置为web.xml
toDevelopment
以将其调低。
<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
。