我开始使用 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()
不要忘记将您的实现添加到 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/