显示的InputStream在JSF动态图像(Show an InputStream as dyna

2019-06-26 13:13发布

我们如何嵌入并显示一个InputStream的JSF 2.0 OmniFaces动态图像?

Answer 1:

OmniFaces不提供这方面的任何工具 - 但。

如果图像文件所在的磁盘文件系统上,那么你就需要在servletcontainer配置来创建一个虚拟的情境,使他们能够通过正常的URL进行访问。 另见从web应用/ webcontext外部加载的图像/部署使用文件夹的<h:graphicImage的>或<img>标签 。

如果图像文件被存储在数据库中,那么你需要创建一个简单的servlet刚刚写入InputStream从DB图像的OutputStream的HTTP响应。 另请参阅如何在JSP页面检索和显示从数据库中的图像? (请注意,这并不需要JSP / HTML,可以作为良好的只是使用<h:graphicImage> ,因为它仅仅是生成一个HTML <img>元素)。

还有的PrimeFaces <p:graphicImage> ,但是这是一个有点不直观来实现。 另请参见显示来自数据库的动态图像具有p:graphicImage的和StreamedContent 。


更新 :因为OmniFaces 2.0(对于JSF 2.2)有一个<o:graphicImage>组件等等直接引用其支撑byte[]InputStream在属性@ApplicationScoped在像下面以直观的方式管理的bean:

<o:graphicImage value="#{imageStreamer.getById(bean.imageId)}" />
@Named
@ApplicationScoped
public class ImageStreamer {

    @Inject
    private ImageService service;

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

}

在相反PrimeFaces <p:graphicImage> ,无<f:param>需要和EL方法参数被评估期间显示响应阶段,但EL方法本身当浏览器实际请求的图像仅调用。 又见陈列柜和关于这一主题的博客 。



文章来源: Show an InputStream as dynamic image in JSF