Jsf 2 在JSF中将InputStream显示为动态图像

Jsf 2 在JSF中将InputStream显示为动态图像,jsf-2,inputstream,omnifaces,graphicimage,Jsf 2,Inputstream,Omnifaces,Graphicimage,我们如何在JSF2.0中使用OmniFaces将InputStream嵌入并显示为动态图像?OmniFaces还没有为此提供任何实用程序 如果映像文件位于磁盘文件系统上,则需要在servletcontainer配置中创建虚拟上下文,以便可以通过普通URL访问它们。另见 如果图像文件存储在DB中,那么您需要创建一个简单的servlet,它只将图像的InputStream从DB写入HTTP响应的OutputStream。另请注意,这并不需要JSP/HTML,您可以使用它,因为它只生成一个HTML元素

我们如何在JSF2.0中使用OmniFaces将InputStream嵌入并显示为动态图像?

OmniFaces还没有为此提供任何实用程序

如果映像文件位于磁盘文件系统上,则需要在servletcontainer配置中创建虚拟上下文,以便可以通过普通URL访问它们。另见

如果图像文件存储在DB中,那么您需要创建一个简单的servlet,它只将图像的InputStream从DB写入HTTP响应的OutputStream。另请注意,这并不需要JSP/HTML,您可以使用它,因为它只生成一个HTML元素

也有PrimeFaces,但这在实现上有点不直观。另见

更新:由于适用于JSF 2.2的OmniFaces 2.0,有一个组件支持直接引用@ApplicationScoped托管bean中的byte[]或InputStream属性,如下所示:

<o:graphicImage value="#{imageStreamer.getById(bean.imageId)}" />
与PrimeFaces相反,不需要,EL方法参数在渲染响应阶段求值,但EL方法本身仅在浏览器实际请求图像时调用。另见和

@Named
@ApplicationScoped
public class ImageStreamer {

    @Inject
    private ImageService service;

    public InputStream getById(Long id) { // byte[] is also supported.
        return service.getContent(id);
    }

}