【问题标题】:passing query parameter to graphicImage to prevent img caching将查询参数传递给graphicImage以防止img缓存
【发布时间】:2014-06-20 17:05:25
【问题描述】:

我需要将查询参数传递给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" />

【问题讨论】:

    标签: java jsf jsf-2


    【解决方案1】:

    你可以试试这个

    最简单的方法是将文件夹添加为您正在使用的 servletcontainer 的“虚拟上下文”。目前尚不清楚您使用的是哪一个。在 Tomcat 中,只需向 server.xml 添加一个新文件

    <Context docBase="/path/to/images" path="/images" />
    

    在 Glassfish 中,只需将备用文档根添加到 glassfish-web.xml 中

    <property name="alternatedocroot_1" value="from=/images/* dir=/path/to" />
    

    有关详细信息,请参阅 servletcontainer 的文档。最终,它们应该可以通过普通 URL 访问,以便您可以使用例如:

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

    【讨论】:

      【解决方案2】:

      我用下面的方法来解决这个问题。它不像使用图形图像的库和名称属性那样直观。请让我知道是否有其他解决方法。谢谢

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

      【讨论】:

        【解决方案3】:

        您的情况的最佳选择似乎是使用 HTML &lt;img /&gt; 标记。令人惊讶的是,大多数图像缓存解决方案都是基于随机生成的字符串,因为没有 HTML 标准的方法来实现它。这将欺骗浏览器并强制它再次下载。

        无需多次硬编码图像路径,只需使用&lt;ui:param /&gt; 将变量保留在facelets 中。

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

        其中#{currentDate} 是当前的Date 实例。这可以通过将请求范围的 bean 添加到您的 faces-config 来实现:

        <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">
        

        因此您当前的图像将在每个请求中被检索。

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

        另请参阅:

        【讨论】:

          猜你喜欢
          • 2017-09-27
          • 2014-08-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-01-26
          • 1970-01-01
          • 2013-08-02
          相关资源
          最近更新 更多