使用更新功能时,p:graphicimage
似乎存在错误。通过value="#{myController.myStreamedContent}"
加载一张图片有效,但在更改myController.myStreamedContent
后更新p:graphicimage
时,之前加载的图片保持不变。设置cache="false"
是可能的,但这在我的Firefox 45.0中不起作用。我使用PrimeFaces 5.3。
以下网站也提到了这一点:
是否有任何替代方案可以提供与p:graphicimage
类似或相同的功能?我基本上需要能够在byte[]
内显示存储为MEDIUMBLOB
的图片。
答案 0 :(得分:2)
JSF实用程序库OmniFaces具有<o:graphicImage>
,从技术上讲,它在流式传输和缓存图像方面做得更好。它不会调用getter方法twice,而只会在浏览器确实需要下载图像时调用一次。此外,它支持使用byte[]
或InputStream
,而无需使用包装器。总而言之,你最终会得到更清晰的模型。
@Named
@ApplicationScoped
public class ImageStreamer {
@Inject
private ImageService service;
public byte[] getById(Long id) {
return service.getContent(id);
}
}
<o:graphicImage value="#{imageStreamer.getById(bean.image.id)}" />
默认情况下强制浏览器不缓存图像,因此每次请求都会下载图像。为了提高效率,可以设置lastModified
属性,以便只要图像按lastModified
值保持不变,浏览器就可以缓存图像。
<o:graphicImage value="#{imageStreamer.getById(bean.image.id)}" lastModified="#{bean.image.lastModified}" />