JSF / primefaces显示图像代码 - 图像位置?

时间:2013-02-28 15:59:00

标签: java jsf primefaces

我正在使用带有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

我很欣赏在显示表单代码时如何存储图像的最佳实践以及如何操作。

2 个答案:

答案 0 :(得分:4)

由于您的图片位于您的网络文件夹中,因此您不需要使用DefaultStreamedContent。对于动态生成的图像,我只留下

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

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

在graphicImage上,您可以参考:

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

请注意,如果您的Web上下文不是root用户,则可能需要调整graphicImage标记。

修改 你实际上可以使这更简单:

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

确保为连接的属性设置一个getter。

答案 1 :(得分:2)

按如下方式创建StreamedContent

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

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