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

时间:2016-07-18 00:56:14

标签: jsf primefaces

我在像“Users \ name \ folder \ image.jpg”这样的目录中有一个图像

如何在jsf中显示图像?

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

知道我怎么能这样做吗?

1 个答案:

答案 0 :(得分:0)

来自Primefaces User Guide

  

3.51 GraphicImage

     

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将输入流作为第一个参数,将mime类型作为第二个参数。在实际应用程序中,您可以在从数据库中读取图像后创建输入流。例如 java.sql.ResultsSet API有getBinaryStream()方法来读取存储的blob文件   数据库中。

     

...

     

如何运作

     

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

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

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

     

传递参数和数据迭代

     

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

     

<强> StreamedContent

     

开箱即用的两个StreamedContent实现; DefaultStreamedContent不使用InputStream而不是可序列化,而可序列化的ByteArrayContent使用字节数组。

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

相关问题