Jsf 2 如何在用户详细信息中显示动态照片';s页
可能重复:Jsf 2 如何在用户详细信息中显示动态照片';s页,jsf-2,path,primefaces,graphicimage,Jsf 2,Path,Primefaces,Graphicimage,可能重复: 我想从存储在数据库中的url中显示一张照片,因此我使用了如下方法 <h:panelGrid columns="1"> <p:graphicImage value="#{userController.photo}"/> </h:panelGrid> system.out.println显示图像的正确路径,但在显示页面中不显示照片, 因此,任何
我想从存储在数据库中的url中显示一张照片,因此我使用了如下方法
<h:panelGrid columns="1">
<p:graphicImage value="#{userController.photo}"/>
</h:panelGrid>
system.out.println显示图像的正确路径,但在显示页面中不显示照片,
因此,任何想法???首先,新文件(“”)。getAbsolutePath()
返回当前工作目录。即,在发出启动服务器的命令时打开的本地磁盘文件系统目录。此值不能保证每次启动服务器时都相同。这取决于服务器的启动方式。例如,在IDE中,或在命令控制台中,或通过服务等
您绝对不应该让您的业务逻辑依赖于这种环境不一致
其次,生成的HTML必须指向URL(HTTP路径),而不是本地磁盘文件系统路径。也就是说,网络浏览者必须通过类似URL的URL单独下载图像http://example.com/contextname/images/foo.png
(因此,Web服务器不必自动将它们嵌入HTML代码中)。只有当新文件(“”
指向已部署webapp的公共web内容文件夹时,当前的代码方法才会起作用,这是非常非常不可能的
您应该确保
指向有效的HTTP URL,即您可以复制粘贴到webbrowser地址栏中的URL
现在还不清楚你为什么会这样设计,你的业务限制是什么,所以不可能给出一个合适的答案来正确解决这个问题。这里有几个链接显示了(轻微的)不同的解决方法:
照片的名字包括分机。我的两分钱。使用图像URL可能会将您的目录结构暴露给带有
firebug
或类似内容的任何人。因此,可能会发生许多不好的事情,如果我能帮助的话,我不喜欢使用与应用服务器文件系统相关的文件路径。如果您的实现支持它,我建议您使用primefaces从数据库中提供图像。这可能对yoy“有效”,但这是不可靠的。请看巴卢斯的答案。你完全走错方向了。请在为时已晚之前停止(一旦您将如此重大的概念性错误带入生产环境,您肯定会被窃听/解雇)。+1因为“您绝对不应该让您的业务逻辑依赖于如此不一致的环境。”OP还可以使用动态映像(如果它们存储在磁盘上)。我也对安全问题持怀疑态度。
public String getPhoto() {
String path = new File("").getAbsolutePath();
ph =ejbPhoto.find(current.getIdPhoto());
System.out.println("+PHOTO +++++++++++++++"+path+"\\"+ph.getPhotoName());
return path+"\\"+ph.getPhotoName();
}
<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();
}