2

我们如何InputStream使用 OmniFaces 在 JSF 2.0 中嵌入和显示动态图像?

4

1 回答 1

2

OmniFaces 尚未为此提供任何实用程序。

如果图像文件位于磁盘文件系统上,那么您需要在 servletcontainer 配置中创建一个虚拟上下文,以便可以通过普通 URL 访问它们。另请参阅使用 <h:graphicImage> 或 <img> 标签从 webapps/webcontext/deploy 文件夹外部加载图像

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

有 PrimeFaces <p:graphicImage>,但这实施起来有点不直观。另请参阅使用 p:graphicImage 和 StreamedContent 显示来自数据库的动态图像


更新:由于 OmniFaces 2.0(对于 JSF 2.2),有一个<o:graphicImage>组件支持以直观的方式直接引用托管 bean 中的byte[]orInputStream属性,如下所示:@ApplicationScoped

<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 方法本身仅在浏览器实际请求图像时才被调用。另请参阅有关该主题的展示博客

于 2012-07-25T14:21:03.083 回答