2010-11-24 41 views
9

我开始使用JSF 2,所以我想试试h:outputStylesheet。它工作正常,但后来我试图应用“模式”或向查询字符串添加查询,该查询随文件版本而变化,以强制浏览器获取更改。如何使用JSF 2 h:outputStylesheet实现“CSS版本控制”(解决缓存问题)?

类似于what is used here

不幸的是,我一直无法做到这一点。实际上,当使用该标签时,它不会生成一个简单的URL,而是一个已经具有查询字符串的已计算的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}'/>"/> 
+0

你能后的你已经尝试什么的例子吗? :) – 2010-11-24 15:37:04

回答

7

面临着同样的挑战,我结束向上延伸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() 

Available here源。

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

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