【问题标题】:JSF/primefaces display image out of code - Image Location?JSF/primefaces 显示代码中的图像 - 图像位置?
【发布时间】:2013-02-28 15:58:59
【问题描述】:

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

我希望在以代码形式显示图像时将图像存储在何处以及如何操作的最佳做​​法。

【问题讨论】:

  • 您的图片实际位于何处?
  • 我的图片位于 WebContent/images/ - 但我也愿意使用新结构来存储我的图片以供 java 代码使用。

标签: java jsf primefaces


【解决方案1】:

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

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

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

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

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

请注意,如果您的 web 上下文不是 root,您可能需要调整 graphicsImage 标记。

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

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

只要确保有一个用于连接属性的 getter。

【讨论】:

  • 感谢最佳实践!
  • 如果我在D:/Images 之类的位置上有图像,那么我该如何获得?你能给我任何提示吗..
  • @Yubaraj 除非您的 Web 服务器配置为从 d:/Images 提供文件,否则您将无法仅将 p:graphicImage 指向该文件夹。您需要编写一个 servlet,读取对特定 URL(即 /public/images)的请求并将这些请求映射到 D:/Images 文件夹中的文件。祝你好运
【解决方案2】:

如下创建您的StreamedContent

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

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

【讨论】:

  • 感谢您简洁地回答我的问题!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-17
  • 1970-01-01
相关资源
最近更新 更多