h:graphicImage 通过 f:ajax 更新其值时不会下载

Posted

技术标签:

【中文标题】h:graphicImage 通过 f:ajax 更新其值时不会下载【英文标题】:h:graphicImage is not downloaded when its value is updated through f:ajax 【发布时间】:2012-04-03 23:50:03 【问题描述】:

我在页面上有一个图像组件:

<h:graphicImage value="/imageServlet?imageId=#someBean.imageId"/>

在页面下方,我有一个 commandLink,其中包含:

<f:ajax execute="@form" render="@all"></f:ajax>

当我单击命令链接时,页面中的所有部分都会更新。这也包括图像的src。因此,我可以在 firebug 中看到 h:graphicImage 已成功更新。

现在,问题是,即使src 已更新,新图像也不会从服务器下载,因此我在应该出现图像的位置得到一个“X”。当我右键单击图像并单击“查看图像”时,它已成功下载。

我的问题是,是否有其他方法可以使用 ajax 更新 h:graphicImage,或者我需要采取其他措施来完成预期的行为?

注意: 我使用的是 Mojarra 2.1.6、Tomcat 7,并且我没有使用任何第三方组件套件。

谢谢,

塞尔坎

【问题讨论】:

PrimeFace update after upload的可能重复 感谢@BalusC 的指针,但这似乎是一个不同的用例。在我的例子中,图像组件正在请求一个已经存在的图像(通过图像 servlet 和图像 servlet - 当访问时 - 以正确的图像和正确的 mime 类型等响应)。 ajax 命令基本上更新页面,组件(加载时)请求现有的 url,我可以看到 src 已更新(尽管浏览器未请求图像) 嗯好的,因此 ajax 响应返回了一个 &lt;img src&gt; 与不同的 imageId 参数值?大家都试过哪些浏览器? 是的,src 已更新。我试过 IE、Chrome、Firefox 和 Safari(所有最新的主要版本) 只是想对此进行跟进,问题仍未解决。我已经通过使用 javascript 在图像 url (src) 的末尾附加时间戳参数来解决这个问题。 js 导致图像从新的时间戳 url 重新加载。这是一个肮脏的解决方案,但至少提供了一些可接受的功能 【参考方案1】:

这可能是与浏览器相关的问题。您是否尝试过禁用浏览器缓存?

【讨论】:

我试过检查浏览器缓存,不是问题。事实上,这种情况发生在浏览器之前未访问过的图像上。如果图像显示一次,则后续请求同一图像时不会出现问题。另外,我在 IE、FF、Chrome、Safari 上都试过了,结果都一样

以上是关于h:graphicImage 通过 f:ajax 更新其值时不会下载的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 h:graphicImage JSF 2.0 显示图像

如何同时使用导航规则和 f:ajax

如果组合组件为空,如何不设置组件内部的属性?

f:ajax 和 a4j:ajax 之间有啥区别吗?

f viewaction 中的 f ajax 之类的东西?

使用 f:ajax 渲染多个组件