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}" />

的回报:

. io .FileNotFoundException: imagesreddot.png

我将欣赏最佳实践在哪里存储我的图像时,显示它的形式代码,以及如何做到这一点。

既然你的图像在你的web文件夹中,你真的不需要使用DefaultStreamedContent。我将把只留给动态生成的图像。

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

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

在graphicImage中,你可以引用它:

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

注意,如果你的web上下文不是根,你可能需要调整graphicImage标签。

编辑你可以让它更简单:

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

按如下方式创建StreamedContent:

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

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

相关内容

  • 没有找到相关文章

最新更新