Jsf p的备选方案:graphicImage,它可以显示来自字节[]的图像并控制浏览器缓存

Jsf p的备选方案:graphicImage,它可以显示来自字节[]的图像并控制浏览器缓存,jsf,primefaces,bytearray,browser-cache,graphicimage,Jsf,Primefaces,Bytearray,Browser Cache,Graphicimage,使用更新功能时,p:graphicimage似乎存在错误。通过value=“#{myController.myStreamedContent}”加载一个图像是可行的,但是当更改myController.myStreamedContent然后更新p:graphicimage时,先前加载的图像保持不变。可以设置cache=“false”,但这在我的Firefox45.0中不起作用。我使用PrimeFaces5.3 以下网站也提到了这一点: 是否有提供与p:graphicimage类似或同等

使用更新功能时,
p:graphicimage
似乎存在错误。通过
value=“#{myController.myStreamedContent}”
加载一个图像是可行的,但是当更改
myController.myStreamedContent
然后更新
p:graphicimage
时,先前加载的图像保持不变。可以设置
cache=“false”
,但这在我的Firefox45.0中不起作用。我使用PrimeFaces5.3

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

是否有提供与
p:graphicimage
类似或同等功能的替代方案?我基本上需要能够在
MEDIUMBLOB
中显示存储为
byte[]
的图像,JSF实用程序库有一个从技术上来说在流式处理和缓存图像方面做得更好的工具。它不调用getter方法,只在浏览器确实需要下载图像时调用一次。此外,它还支持使用
字节[]
InputStream
而无需包装器。总而言之,你最终得到了更清晰的模型

@Named
@ApplicationScoped
public class ImageStreamer {

    @Inject
    private ImageService service;

    public byte[] getById(Long id) {
        return service.getContent(id);
    }

}

JSF实用程序库有一个在流式传输和缓存图像方面技术上做得更好的工具。它不调用getter方法,只在浏览器确实需要下载图像时调用一次。此外,它还支持使用
字节[]
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="#{bean.image.lastModified}" />