css - 部署后不会反射(reflect) CSS 文件中的更改

标签 css jsf

我正在开发一个 JSF 网络应用程序。每次我更改 CSS 文件并首次部署程序时,CSS 文件中的更改都不会反射(reflect)出来。我在不同的情况下对其进行了测试。这是怎么引起的,我该如何解决?

最佳答案

yes when I press Ctrl+F5 it is loaded

然后它只是从浏览器缓存中获取的。那很好。它在实际生产环境中节省了网络带宽。但我可以想象,这在开发过程中或每当您将更新投入生产时都会令人不安。在开发过程中,我只是学会习惯 Ctrl+F5 键。但对于生产,您真的很想解决它,因为最终用户可能不知道这个“技巧”。

一种常见的方法是将版本号作为请求参数附加到 CSS 资源。

<link rel="stylesheet" href="style.css?v=1.0" />

每当您对 CSS 进行重大更改时,您都希望在将更新投入生产之前增加版本号。

<link rel="stylesheet" href="style.css?v=1.1" />

这将强制浏览器重新加载样式表。

另一种方法是为此使用服务器的启动时间。当您使用 JSF 时,这可以通过 java.util.Date 轻松完成。在 faces-config.xml 中声明为应用程序范围内的托管 bean。

<managed-bean>
    <description>Startup date</description>
    <managed-bean-name>startup</managed-bean-name>
    <managed-bean-class>java.util.Date</managed-bean-class>
    <managed-bean-scope>application</managed-bean-scope>
</managed-bean>

然后你可以使用Date#getTime()获取时间戳:

<link rel="stylesheet" href="style.css?#{startup.time}" />

这将像这样生成到 HTML 中:

<link rel="stylesheet" href="style.css?1314105929937" />

每次重启服务器或重新部署 webapp 时它都会改变,因此浏览器将被迫重新加载资源(即使它实际上没有改变!如果缓存和带宽使用是一个问题,请记住这一点).相同的技术适用于其他静态资源,如 JavaScript 和图像。

当您已经在使用 JSF 2.x 时,您可以为此使用内置的“资源库版本控制”功能。另见 What is the JSF resource library for and how should it be used?

关于css - 部署后不会反射(reflect) CSS 文件中的更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7161139/

相关文章:

java - JSF Bean 属性未更新

java - JSF/JPA 值绑定(bind)表达式未设置实体 bean 的属性

css - Fancybox 加载时从父窗口移除滚动条

html - Css 外部资源停止工作

jquery - 如何使用 jQuery 淡入选择选项

java - 如何将列减少一些可变量?

css - Datepicker 在 ie7 中看起来很糟糕

javascript - 使用状态变量作为样式 Prop 值

java - Primefaces 选项卡 View : set Active Index after some counting

java - 为什么我的 Facelets 循环变量不会超出范围?