0

我正在使用带有 primefaces 的 JSF,并希望显示来自 java 代码的图像。

我已经在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: \images\reddot.png

我希望在以代码形式显示图像时在何处存储图像以及如何执行图像的最佳实践。

4

2 回答 2

4

由于您的图像位于您的网络文件夹中,因此您实际上不需要使用 DefaultStreamedContent。我保留动态生成的图像。

对于您的情况,我将创建一个简单的方法,该方法根据布尔变量返回图像路径(在您的 Web 文件夹中)。像这样的东西:

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

在图形图像上,您可以参考:

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

请注意,如果您的 Web 上下文不是根目录,您可能需要调整 graphicsImage 标记。

编辑 您实际上可以使这更简单:

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

只要确保有一个连接属性的吸气剂。

于 2013-02-28T16:20:16.557 回答
2

创建StreamedContent如下:

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

当您创建时,new File()这将是您磁盘中的绝对路径,而不仅仅是在您的应用程序中。

于 2013-02-28T16:16:25.417 回答