通过f:ajax更新h:graphicImage的值时,图像无法下载

3

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

<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,没有使用任何第三方组件套件。
谢谢,
Serkan

可能是PrimeFace上传后更新的重复问题。 - BalusC
感谢@BalusC的指针,但那似乎是一个不同的用例。在我的情况下,图像组件正在请求一个已经存在的图像(通过图像servlet,当访问时,图像servlet会响应正确的图像和正确的mime类型等)。ajax命令基本上更新页面,组件(加载时)请求现有url之一,我可以看到src已更新(尽管浏览器没有请求图像)。 - Serkan Durusoy
我只是想在这里跟进一下,问题仍然未解决。我通过在图像url(src)的结尾附加时间戳参数来使用javascript解决了此问题。js会导致图像从新的带有时间戳的url重新加载。这是一种不太优雅的解决方案,但至少提供了基本的功能。 - Serkan Durusoy
你解决了吗?我被这个问题困扰得要命。有趣的是,在本地主机上它完全正常工作。我查看了GAE的日志,显示图像路径没问题,但Ajax在JSF屏幕上无法正确加载它。 - A M
@Aayush,除了我在之前的评论中描述的解决方法之外,我无法解决它。 - Serkan Durusoy
显示剩余2条评论
1个回答

0

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


我尝试检查浏览器缓存,但这不是问题所在。事实上,这种情况发生在浏览器之前没有访问过的图像上。如果一个图像被显示一次,则在随后请求相同图像时不会出现问题。此外,我已经尝试了IE、FF、Chrome、Safari等多个浏览器,结果都相同。 - Serkan Durusoy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接