.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" 作为属性添加到&lt;Context&gt; 元素会在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 文件中的更改未反映在浏览器中,需要重新启动和构建的主要内容,如果未能解决你的问题,请参考以下文章

对话框中的更改未反映在可执行文件中

node_modules 中的代码未反映在浏览器中

运行 Heroku 应用程序未显示上传文件中的更改

刀片视图未反映更改

只有 css 文件中的某些特定更改会反映在浏览器中

NSMutableDictionary 中的更改未反映在父 NSDictionary 中