如何在用户详细信息页面中显示动态照片

时间:2012-10-03 19:43:52

标签: jsf-2 path primefaces graphicimage

  

可能重复:
  Display image from database with p:graphicImage

我想显示存储在数据库中的网址中的照片,所以我按照以下方式使用

                <h:panelGrid columns="1">
                    <p:graphicImage value="#{userController.photo}"/> 
                </h:panelGrid>

并且照片属性是指向照片位置的网址字符串

public String getPhoto() {
   String path = new File("").getAbsolutePath();
   ph =ejbPhoto.find(current.getIdPhoto()); 
   System.out.println("+PHOTO +++++++++++++++"+path+"\\"+ph.getPhotoName()); 
   return path+"\\"+ph.getPhotoName();
}

system.out.println显示图像的正确路径,但在显示页面中不显示照片, 所以任何想法??

3 个答案:

答案 0 :(得分:3)

首先,new File("").getAbsolutePath()返回当前工作目录。即在命令启动服务器时打开的本地磁盘文件系统目录。每次启动服务器时,此值保证相同。这取决于服务器的启动方式。例如。在IDE,命令控制台或服务等

你绝对不应该让你的业务逻辑依赖于这种环境不一致。

其次,生成的HTML <img src>必须指向URL(HTTP路径),而不是指向本地磁盘文件系统路径。这就是webbrowser必须通过像http://example.com/contextname/images/foo.png之类的URL单独下载图像(因此不是必须自动将它们嵌入HTML代码中的网络服务器)。您当前的代码方法仅在new File("")指向已部署的Web应用程序的公共Web内容文件夹时才有效,这非常非常不可能。

您应确保<img src>指向有效的HTTP网址,这是您可以在网页浏览器的地址栏中进行复制的网址。


目前还不清楚为什么你这样设计它以及你的业务限制是什么,因此不可能发布一个合适的答案如何正确解决它。所以这里有几个链接显示(轻微)不同的解决方法:

答案 1 :(得分:1)

我的两分钱。使用图片网址可能会将您的目录结构暴露给firebug或类似内容的任何人。因此可能会发生许多不好的事情,如果我能帮助它,我不喜欢使用与我的应用服务器文件系统相关的文件路径。如果您的实现支持它,我建议您使用primefaces'DynaImage

从数据库提供图像

答案 2 :(得分:-1)

解决方案很简单,照片的路径位于netbeans项目的Web文件夹下(Project \ build \ web \ photo)

<h:panelGrid columns="1" width="50%" >
                    <p:graphicImage value="/photo/#{userController.photo}"/> 
  </h:panelGrid>

并且在照片获取方法中我把:

public String getPhoto() {

   ph =ejbPhoto.find(current.getIdPhoto()); 
   if(ph==null) return "noPhoto.png";
   System.out.println(ph.getPhotoName()); 
   current=null;
    return ph.getPhotoName();
}

,照片名称包含扩展名。