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

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

我们如何在JSF 2.0中使用OmniFaces将
输入流
嵌入并显示为动态图像?

OmniFaces尚未提供任何实用程序

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

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

这里有PrimeFaces
,但实现起来有点不直观。另见


更新:由于OmniFaces 2.0(适用于JSF 2.2),有一个组件支持直接引用
字节[]
输入流
属性,在
@ApplicationScoped
托管bean中,直观方式如下:

<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);
    }

}