java - 如何使用 JSF 2 h :outputStylesheet? 实现 "CSS versioning"(以解决缓存问题)

标签 java css versioning jsf-2 java-ee-6

我开始使用 JSF 2,所以我想尝试一下 h:outputStylesheet。它工作正常,但后来我尝试应用“模式”或将查询字符串添加到随文件版本而变化的请求中的技巧,以强制浏览器获取更改。

类似于 what is used here .

不幸的是我没能做到。实际上,当使用该标记时,它不会生成一个简单的 URL,而是生成一个已经具有查询字符串的计算值。我在规范和 here 中找到了一些关于 JSF 2 资源版本控制的信息。 , 但它似乎指的是不是我需要的资源的多个版本。

当然,我总是可以回去不使用新标签。但我想在这里分享这个以供讨论。

更新 1 - 一些例子:

我试过的是这样的:

<h:outputStylesheet library="css" name="estilo.css?v=1" target="head"/>

呈现为:

<link type="text/css" rel="stylesheet" href="RES_NOT_FOUND" />

描述性很强。 ;-)

我试图得到的是这样的:

<link rel="stylesheet" type="text/css" href="../css/estilo.css?v=1"/>

其中,使用 JSP,我曾经这样说:

<link rel="stylesheet" type="text/css"
 href="<c:url value='/css/estilo.css?v=${initParam.version}'/>"/>

最佳答案

面对同样的挑战,我最终扩展了 javax.faces.application.ResourceHandlerWrapper 和 javax.faces.application.ResourceWrapper 以将“&v=x.y.z”附加到 ResourceWrapper# 的​​结果getRequestString().

我看到 Primefaces 和 Openfaces 实现了这种解决方案。 看看源码就可以了

org.primefaces.application.PrimeResourceHandler#createResource(String resourceName, String libraryName)

org.primefaces.application.PrimeResource#getRequestPath()

Available here .

不要忘记将您的实现添加到 faces-config.xml 中:

<application>
  <resource-handler>your.package.YourResourceHandlerWrapper</resource-handler>
</application>

关于java - 如何使用 JSF 2 h :outputStylesheet? 实现 "CSS versioning"(以解决缓存问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4268345/

相关文章:

java - Android:ArrayList存储奇怪的值

java - java调试中是否可以在外部完成线程?

css - 更改WordPress主题的字体 "Zerif Lite"

jenkins - 如何在不覆盖的情况下对 Artifactory 上的 Artifactory 进行版本化

api - REST API 的多个版本如何共享相同的数据模型?

java - 如何以图形方式重绘字符串数组而不与文本重叠?

java - 为什么 slf4j 的 Logger 没有一个方法可以同时接受消息的可变参数和异常?

html - ngClass Angular 4,内部有功能

css - LESS:仅当选择器在另一个选择器中时才应用规则集

c# - 实现开发流程 - 版本控制和安装程序