我正在使用JSF2.0/Primefaces 4.0和JBoss 7开发一个应用程序。
问题是,每次我进行新的部署(使用.war)时,所有用户都必须清理浏览器缓存才能看到更改(主要是图像定位)。
我知道浏览器保存页面的内容是为了让它运行得更快,但我也知道有一种方法可以控制HTTP参数cache-control
,使其重新验证页面。
问题是:如何让客户端浏览器识别出有新的部署并清理存储的缓存?当然,使用JBoss7。
此外,我不想在每次访问中重新验证缓存,只有当有新的部署。
这可能吗?
我建议使用内置的JSF资源库机制,它支持资源的版本控制。由于客户端缓存将在给定资源的路径更改时加载该资源。通过这种方式,您可以更改资源的版本号,并敦促客户端重新加载它们,而无需处理任何缓存老化策略。
SO 上有几个关于这个主题的好文章
- JSF资源库的用途是什么?应该如何使用它
- JSF资源版本控制
- JSF2静态资源缓存
如果是缓存的css文件,则可以使用此代码向css文件添加版本。这样您就不必自己维护版本了。
<h:outputStylesheet>
@import url('/someFolder/resources/css/page.css?v=${applicationInfoBean.projectVersion}')
</h:outputStylesheet>
其中applicationInfoBean.projectVersion是我自己的bean和一个返回当前项目版本的方法。
另一种方法是更改ResourceHandlers缓存资源的时间。默认时间为一周。你可以在Mojarra:中更改
<context-param>
<param-name>com.sun.faces.defaultResourceMaxAge</param-name>
<param-value>28800000</param-value> <!-- 8 hours. -->
</context-param>
在MyFaces:
<context-param>
<param-name>org.apache.myfaces.RESOURCE_MAX_TIME_EXPIRES</param-name>
<param-value>3628800000</param-value> <!-- 6 weeks. -->
</context-param>