首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用JSF 2 h:outputStylesheet实现"CSS版本控制“(以解决缓存问题)?

如何使用JSF 2 h:outputStylesheet实现"CSS版本控制“(以解决缓存问题)?
EN

Stack Overflow用户
提问于 2010-11-24 23:17:23
回答 1查看 3.8K关注 0票数 10

我开始使用JSF2,所以我想尝试h:outputStylesheet。它工作得很好,但随后我尝试应用“模式”或技巧,将查询字符串添加到随文件版本变化的请求中,以强制浏览器获取更改。

就像what is used here一样。

不幸的是我没能做到这一点。实际上,当使用该标记时,它不会生成一个简单的URL,而是一个已经有查询字符串的计算URL。我在规范和here中找到了一些关于JSF2中资源版本控制的信息,但它似乎引用了一个资源的多个版本,这并不是我所需要的。

当然,我总是可以不使用新标记。但我想在这里分享这一点以供讨论。

更新1-一些示例:

我试过的东西是这样的:

代码语言:javascript
复制
<h:outputStylesheet library="css" name="estilo.css?v=1" target="head"/>

它呈现为:

代码语言:javascript
复制
<link type="text/css" rel="stylesheet" href="RES_NOT_FOUND" />

很有描述性。;-)

我想要得到的东西是这样的:

代码语言:javascript
复制
<link rel="stylesheet" type="text/css" href="../css/estilo.css?v=1"/>

在使用JSP时,我通常这样说:

代码语言:javascript
复制
<link rel="stylesheet" type="text/css"
 href="<c:url value='/css/estilo.css?v=${initParam.version}'/>"/>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-07-27 18:17:34

面对同样的挑战,我最终扩展了javax.faces.application.ResourceHandlerWrapper and javax.faces.application.ResourceWrapper,将"&v=x.y.z“附加到ResourceWrapper#getRequestString()的结果中。

我见过Primefaces和Openfaces实现的这种解决方案。只需看一下

代码语言:javascript
复制
org.primefaces.application.PrimeResourceHandler#createResource(String resourceName, String libraryName)

代码语言:javascript
复制
org.primefaces.application.PrimeResource#getRequestPath()

Available here

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

代码语言:javascript
复制
<application>
  <resource-handler>your.package.YourResourceHandlerWrapper</resource-handler>
</application>
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4268345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档