sar*_*gue 9 css java versioning java-ee-6 jsf-2
我开始使用JSF 2,所以我想试试h:outputStylesheet.它运行正常,但后来我尝试应用"模式"或将查询字符串添加到请求的技巧,该请求随文件版本而变化,以强制浏览器获取更改.
像这里使用的东西.
不幸的是我无法做到这一点.实际上,当使用该标记时,它不会生成一个简单的URL,而是一个已经有查询字符串的计算URL.我已经在规范和这里找到了有关JSF 2中资源版本化的一些信息,但它似乎指的是资源的多个版本,这不是我需要的.
当然,我总是可以回去不使用新标签.但我想在此分享一下以供讨论.
更新1 - 一些例子:
我试过的是这样的:
<h:outputStylesheet library="css" name="estilo.css?v=1" target="head"/>
Run Code Online (Sandbox Code Playgroud)
其呈现为:
<link type="text/css" rel="stylesheet" href="RES_NOT_FOUND" />
Run Code Online (Sandbox Code Playgroud)
相当具有描述性.;-)
我试图得到的是这样的:
<link rel="stylesheet" type="text/css" href="../css/estilo.css?v=1"/>
Run Code Online (Sandbox Code Playgroud)
其中,使用JSP,我曾经这样说过:
<link rel="stylesheet" type="text/css"
href="<c:url value='/css/estilo.css?v=${initParam.version}'/>"/>
Run Code Online (Sandbox Code Playgroud)
面对同样的挑战,我最终扩展javax.faces.application.ResourceHandlerWrapper and javax.faces.application.ResourceWrapper到将"&v = xyz"附加到结果中ResourceWrapper#getRequestString().
我看到了Primefaces和Openfaces实现的这种解决方案.只要看看它的来源
org.primefaces.application.PrimeResourceHandler#createResource(String resourceName, String libraryName)
Run Code Online (Sandbox Code Playgroud)
和
org.primefaces.application.PrimeResource#getRequestPath()
Run Code Online (Sandbox Code Playgroud)
可在这里.
不要忘记将您的实现添加到faces-config.xml:
<application>
<resource-handler>your.package.YourResourceHandlerWrapper</resource-handler>
</application>
Run Code Online (Sandbox Code Playgroud)