我正在开发一个 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/