繁体   English   中英

如何使用JSF 2 h实现“CSS版本化”(解决缓存问题):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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM