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 响应返回了一个<img src>
与不同的 imageId
参数值?大家都试过哪些浏览器?
是的,src 已更新。我试过 IE、Chrome、Firefox 和 Safari(所有最新的主要版本)
只是想对此进行跟进,问题仍未解决。我已经通过使用 javascript 在图像 url (src) 的末尾附加时间戳参数来解决这个问题。 js 导致图像从新的时间戳 url 重新加载。这是一个肮脏的解决方案,但至少提供了一些可接受的功能
【参考方案1】:
这可能是与浏览器相关的问题。您是否尝试过禁用浏览器缓存?
【讨论】:
我试过检查浏览器缓存,不是问题。事实上,这种情况发生在浏览器之前未访问过的图像上。如果图像显示一次,则后续请求同一图像时不会出现问题。另外,我在 IE、FF、Chrome、Safari 上都试过了,结果都一样以上是关于h:graphicImage 通过 f:ajax 更新其值时不会下载的主要内容,如果未能解决你的问题,请参考以下文章