【问题标题】:how can i display a dynamic photo in the user detail's page [duplicate]如何在用户详细信息页面中显示动态照片[重复]
【发布时间】:2012-10-03 19:43:52
【问题描述】:

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

我想从存储在数据库中的 url 显示一张照片,所以我使用如下

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

并且photo属性是一个指向照片位置的url字符串

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 显示图像的正确路径,但在显示页面中不显示照片, 所以有什么想法吗??

【问题讨论】:

标签: jsf-2 path primefaces graphicimage


【解决方案1】:

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

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

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

您应该确保&lt;img src&gt; 指向一个有效的HTTP URL,正是您可以在网络浏览器的地址栏中复制粘贴的那个。


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

【讨论】:

  • +1 表示“您绝对不应该让您的业务逻辑依赖于这种环境不一致。”
【解决方案2】:

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

提供数据库中的图像

【讨论】:

  • 如果动态图像存储在磁盘上,OP 也可以使用它们。我也对安全问题持怀疑态度。
【解决方案3】:

解决方法很简单,照片的路径在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();
}

并且照片名称包含扩展名。

【讨论】:

  • 这可能对 yoy “有效”,但这是不可靠的。请参阅 BalusC 的回答。
  • 你走错了方向。请在为时已晚之前停止(一旦您将如此重大的概念错误带入生产环境,您肯定会被窃听/解雇)。
猜你喜欢
  • 2023-03-05
  • 2020-12-06
  • 2021-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-23
  • 1970-01-01
相关资源
最近更新 更多