部署后不会反映CSS文件中的更改

时间:2011-08-23 12:38:52

标签: css jsf

我正在开发一个JSF Web应用程序。每当我更改CSS文件并首次部署程序时,CSS文件中的更改都不会反映出来。我在不同情况下测试过它。这是怎么造成的,我该如何解决?

2 个答案:

答案 0 :(得分:12)

  

是的,当我按下Ctrl + F5时,它已加载

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

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

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

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

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

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

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

<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时它都会改变,因此浏览器将被强制重新加载资源(即使它实际上没有被更改!请记住,如果需要缓存和带宽使用,请记住这一点)。相同的技术适用于其他静态资源,如JavaScripts和图像。

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

答案 1 :(得分:0)

我在更改css文件时需要刷新网站时遇到同样的问题,非常难以理解并且非常不方便。

最终我遇到了这个漂亮的小工具,一个javascript文件,你需要在你的项目中实现它。 Aftwards您不再需要刷新网站,只需要保存您的css文件,2,3秒后将自动采用这些更改。

以下是链接:http://cssrefresh.frebsite.nl/

顺便说一句,来自BalusC的非常有用的技巧,一如既往;)

相关问题