2013-02-28 76 views
0

我使用的是与primefaces的JSF,并希望显示来自java代码的图像。JSF/primefaces以代码形式显示图像 - 图像位置?

我已经看到了http://www.primefaces.org/showcase/ui/dynamicImage.jsf

的教程,但我不是我怎么能得到正确我的映像文件的路径清晰:

代码:

豆:

@ManagedBean 
public class ABean { 

    private StreamedContent bStatus; 

    public ABean() { 
     try { 
      Boolean connected = false; 
      if (connected == true) { 
       bStatus = new DefaultStreamedContent(new FileInputStream(new File("/images/greendot.png")), "image/jpeg"); 
      } else {     
       bStatus = new DefaultStreamedContent(new FileInputStream(new File("/images/reddot.png")), "image/jpeg"); 
      } 
     } catch(Exception e) { 
      e.printStackTrace(); 
     } 

    } 

    public StreamedContent getBStatus() { 
     return bStatus; 
    } 

    public void setBStatus(StreamedContent bStatus) { 
     this.bStatus = bStatus; 
    } 
} 

xhtml:

<p:graphicImage value="#{ABean.bStatus}" /> 

回报:

java.io.FileNotFoundException:\影像\ reddot.png

我希望在哪里显示,当它形成的代码,以及如何做到这一点储存我的形象的最佳实践。

+0

实际上你的图像位于哪里? – partlov 2013-02-28 16:01:46

+0

我的图像位于WebContent/images /中 - 但我也打开了一个新的结构来存储我的图像以用于java代码。 – ctekk 2013-02-28 16:03:08

回答

4

由于您的图片位于您的网页文件夹中,因此您并不需要使用DefaultStreamedContent。对于在飞行中生成的图像,我只会在上留下

对于你的情况,我只是创建一个简单的方法,返回基于布尔变量的图像路径(在你的web文件夹中)。事情是这样的:

public String getImagePath(){ 
    return connected ? "/images/greendot.png" : "/images/reddot.png"; 
} 

而且在graphicImage的,你可以直接引用:

<p:graphicImage value="#{yourBean.imagePath}"/> 

注意,你可能需要调整graphicImage的标签,如果你的网络环境是不是root。

编辑 实际上,你可以让这个更简单:

<p:graphicImage value="#{yourBean.connected ? '/images/greendot.png' : '/images/reddot.png'}"/> 

只要确保有连接的属性为getter。

+0

感谢您的最佳实践! – ctekk 2013-03-01 08:54:38

+0

如果我在像D:/ Images这样的位置上有图像,那我该怎么办?你可以给我任何提示.. – Yubaraj 2015-02-23 10:16:07

+0

@Yubaraj除非你的网络服务器配置为提供文件关闭D:/图像,你将无法指出P:graphicImage到该文件夹​​。您需要编写一个servlet来读取特定URL(即/ public/images)的请求,并将这些请求映射到D:/ Images文件夹中的文件。祝你好运 – Andre 2015-02-23 15:19:14

2

创建StreamedContent如下:

bStatus = new DefaultStreamedContent(FacesContext.getCurrentInstance().getExternalContext().getResourceAsStream("/images/greendot.png"), "image/jpeg"); 

当您创建​​这将是你的磁盘绝对路径,不只是在你的应用程序。

+0

谢谢你简洁地回答我的q! – ctekk 2013-03-01 08:55:12