![](/img/trans.png)
[英]How can I implement CSS Cache Busting with JSF outputStylesheet?
[英]How can I implement “CSS versioning” (to solve cache issues) using JSF 2 h:outputStylesheet?
我开始使用JSF 2,所以我想试试h:outputStylesheet。 它运行正常,但后来我尝试应用“模式”或将查询字符串添加到请求的技巧,该请求随文件版本而变化,以强制浏览器获取更改。
像这里使用的东西 。
不幸的是我无法做到这一点。 实际上,当使用该标记时,它不会生成一个简单的URL,而是一个已经有查询字符串的计算URL。 我已经在规范和这里找到了有关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 and javax.faces.application.ResourceWrapper
,将“&v = xyz”附加到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>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.