2

p:graphicimage使用更新功能时似乎存在错误。通过作品加载一张图片value="#{myController.myStreamedContent}",但是当更改myController.myStreamedContent后更新p:graphicimage时,之前加载的图片保持不变。有设置的可能性cache="false",但这在我的 Firefox 45.0 中不起作用。我使用 PrimeFaces 5.3。

以下网站也提到了这一点:

是否有任何替代方案可以提供类似或相同的功能p:graphicimage?我基本上需要能够显示存储byte[]MEDIUMBLOB.

4

1 回答 1

2

JSF 实用程序库OmniFaces有一个<o:graphicImage>从技术上讲在流式传输和缓存图像方面做得更好。它不会调用 getter 方法两次,而只会在浏览器真正需要下载图像时调用一次。此外,它支持使用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}" />
于 2016-03-20T10:33:11.420 回答