我们如何嵌入并显示一个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