将查询参数传递给graphicImage以防止img缓存



我需要向graphicImage传递一个查询参数,以防止IE使用旧的缓存图像。

我在下面尝试并得到这个错误:文件未找到:/RES_NOT_FOUND

<h:graphicImage library="default" name="img/MSM_HeaderSplash.png?v=1.1"  
    alt=" " width="487" height="68" />
下面的

可以工作,但是我真的不想硬编码资源路径:

<h:graphicImage value="resources/default/1_0/img/MSM_HeaderSplash.png?v=1.1"  
    alt=" " width="487" height="68" />

你可以试试这个

最简单的方法是将文件夹添加为您正在使用的servlet容器的"虚拟上下文"。不清楚你用的是哪一个。在Tomcat中,只需在server.xml 中添加一个新文件
<Context docBase="/path/to/images" path="/images" />

,在Glassfish中,这是一个添加一个alternatedoroot到Glassfish -web.xml

的问题。
<property name="alternatedocroot_1" value="from=/images/* dir=/path/to" />

有关详细信息,请参阅servlet容器的文档。最终,它们应该可以通过一个正常的URL访问,这样你就可以使用例如:

<p:graphicImage value="/images/MSM_HeaderSplash.png?v=1.1" />

我用下面的方法来解决这个问题。它不像使用graphicImage的库和name属性那样直观。请让我知道是否有其他工作。由于

<h:graphicImage value="#{resource['default:img/MSM_HeaderSplash.png']}&amp;v=1.0"  alt=" " width="487" height="68" />

对于您的情况,最好的选择似乎是使用HTML <img />标记。令人惊讶的是,大多数图像缓存解决方案都是基于随机生成的字符串,因为没有HTML标准方法来实现它。这将欺骗浏览器,迫使它重新下载。

不需要多次硬编码图像路径,只需使用<ui:param />将变量保存在facelets中。

<ui:param name="imageFolder" value="resources/images" />
<img src="#{imageFolder}/image.jpg?#{currentDate.time}" />

其中#{currentDate}为当前Date实例。这可以通过在faces-config中添加一个请求作用域bean来实现:

<managed-bean>
    <managed-bean-name>currentDate</managed-bean-name>
    <managed-bean-class>java.util.Date</managed-bean-class>
    <managed-bean-scope>request</managed-bean-scope>
</managed-bean>

计算结果为:

<img src="resources/images/image.jpg?1403302512505">

所以你的当前图像将在每次请求中检索。

另一种选择是在web过滤器级别禁用整个浏览器缓存,尽管这会影响您的整个内容。

参见:

  • 在JSF页面显示当前日期
  • 如何强制web浏览器不缓存图像
  • 如何控制网页缓存,跨所有浏览器?

相关内容

  • 没有找到相关文章

最新更新