从外部文件夹获取图像-JAVA-JSF



我在类似"Users\name\folder\image.jpg"的目录中有一个图像

如何在jsf中显示图像?

<p:graphicImage value="" width="400px" height="400px" />

知道我该怎么做吗?

来自Primefaces用户指南

3.51图形图像

GraphicImage扩展了标准JSF图形图像组件,能够像输入流一样显示二进制数据。GraphicImage的主要用例是使显示存储在数据库中的图像或动态图像变得更容易。传统的方法是设计一个Servlet来进行流式传输,GraphicImage在不需要Servlet的情况下完成所有的艰苦工作。

GraphicImage入门

GraphicImage需要org.primefaces.model.StreamedContent内容作为动态图像的值。StreamedContent是一个接口,PrimeFaces提供了一个名为DefaultStreamedContent的内置实现。以下示例从类路径加载图像。

<p:graphicImage value="#{imageBean.image}" />
public class ImageBean {
  private StreamedContent image;
  public DynamicImageController() {
    InputStream stream = this.getClass().getResourceAsStream("barcalogo.jpg");
    image = new DefaultStreamedContent(stream, "image/jpeg");
  }
  public StreamedContent getImage() {
    return this.image;
  }
}

DefaultStreamedContent获取inputstream作为第一个参数,mime类型作为第二个参数。在实际应用程序中,可以在从数据库中读取图像后创建输入流。例如,java.sql.ResultSetAPI使用getBinaryStream()方法读取存储在数据库

它的工作原理

动态图像显示的工作原理如下;

  • 动态图像对其值表达式字符串进行加密以生成密钥
  • 这个键被附加到指向JSF资源处理程序的图像url上
  • Custom PrimeFaces ResourceHandler从url中获取密钥,将表达式字符串解密为类似#{bean.streamedContentValue}的内容,对其进行评估以从bean中获取StreamedContent的实例,并将内容流式传输到客户端

因此,将有两个显示图像的请求,第一个浏览器将请求加载页面,然后另一个请求指向指向JSF资源处理程序的动态图像url。请注意,您不能使用viewscopebean,因为它们在资源加载请求中不可用。

传递参数和数据迭代

您可以通过f:param标记将请求参数传递给graphicImage,因此呈现图像的实际请求可以访问这些值。如果您的图像位于数据迭代组件(如datatable或ui:repeat)中,那么显示动态图像非常方便。

流化内容

有两种现成的StreamedContent实现;DefaultStreamedContent不使用InputStream且不可序列化,而可序列化的ByteArrayContent使用字节数组。

使用java.io类从文件系统获取图像的InputStream,而不是像示例中所示那样从类路径加载图像。

相关内容

  • 没有找到相关文章

最新更新