.xhtml 文件中的更改未反映在浏览器中,需要重新启动和构建
Posted
技术标签:
【中文标题】.xhtml 文件中的更改未反映在浏览器中,需要重新启动和构建【英文标题】:Changes in .xhtml file not reflected in browser, restart and build needed 【发布时间】:2011-10-23 06:38:07 【问题描述】:如果我在 .xhtml
文件中进行更改,这些更改不会反映在浏览器的屏幕上。为了让它工作,我每次都必须重新启动服务器。这对我来说似乎很笨拙。
我在web.xml
中添加了以下上下文参数:
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>
<context-param>
<param-name>javax.faces.FACELETS_REFRESH_PERIOD</param-name>
<param-value>1</param-value>
</context-param>
但是,它们没有任何效果。
我的技术栈如下:
SWF 2.3.0 Primefaces 2.2.1 JSF 2 Spring 安全 3 弹簧 3.1.0M1I EhCache Apache Tomcat 6.0 STS 2.5.1。【问题讨论】:
嗨,BalusC,我又遇到了这个问题。你能帮忙吗。我已经做了你在回答中提到的事情。 【参考方案1】:如果您使用的是 IDE,那么您还必须配置 IDE 以立即将更改发布到服务器。否则,在服务器上运行的 webapp 将无法了解这些更改。
由于您使用的是 STS,而 STS 基本上是 Java EE 的 Eclipse,它预装了一堆特定于 Spring 的插件,我认为给出一个针对 Eclipse 的通用答案已经绰绰有余了。
在 Eclipse 中,您只需在 Servers 视图中双击服务器条目,然后编辑 Publishing 部分以设置 资源更改时自动发布 并将发布间隔设置得尽可能低。它甚至可以是 0 秒。
javax.faces.FACELETS_REFRESH_PERIOD
仅适用于 webapp 上下文中的文件。您只需确保 IDE 尽快将更改发布到 webapp 上下文。
【讨论】:
【参考方案2】:我刚刚花了几个小时才发现在应用程序context.xml
中将antiResourceLocking="true"
作为属性添加到<Context>
元素会在Tomcat 7 中导致同样的问题:facelet 文件中的更改未被拾取;需要重新部署。
删除 antiResourceLocking="true"
或将其更改为 antiResourceLocking="false"
可使 Tomcat 在开发项目阶段按预期工作。
【讨论】:
【参考方案3】:您应该在 web.xml 中添加这些行,以便在 .xhtml 代码发生更改时刷新。
<!-- JSF 2 (Facelets 2.x) -->
<context-param>
<param-name>javax.faces.FACELETS_REFRESH_PERIOD</param-name>
<param-value>0</param-value>
</context-param>
<!-- Set the project stage to "Development", "UnitTest", "SystemTest", or "Production". -->
<!-- An optional parameter that makes troubleshooting errors much easier. -->
<!-- You should remove this context parameter before deploying to production! -->
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>
<!--For JSF 1.2 (Facelets 1.x) parameters are -->
<context-param>
<param-name>facelets.REFRESH_PERIOD</param-name>
<param-value>0</param-value>
</context-param>
<context-param>
<param-name>facelets.DEVELOPMENT</param-name>
<param-value>true</param-value>
</context-param>
【讨论】:
OP 有 '1' 表示每秒。将其设置为“0”并没有太大的不同,当然不能解决 OP 的问题。以上是关于.xhtml 文件中的更改未反映在浏览器中,需要重新启动和构建的主要内容,如果未能解决你的问题,请参考以下文章