我知道JSF要显示图像,路径必须来自Web /应用服务器根目录,而不是系统根目录。所以没有绝对的道路。但这是我的问题。由于我将允许用户上传他们自己的图片并稍后显示它们,我需要将图像保存在某处。但是,如果我将图像保存在我的项目中,未来的项目重新部署可能会删除我的图片。因此我认为,最好上传到不受以后重新部署影响的文件夹。但是h:graphicImage或p:graphicImage不允许我使用绝对路径。我有什么选择来解决这个问题?
我知道这给了我项目战的路径
ServletContext servletContext = (ServletContext) FacesContext.getCurrentInstance().getExternalContext().getContext();
String path = servletContext.getRealPath("");
有没有办法让我访问网络/应用程序根目录?
Primefaces 2.2-RC2
Glassfish 3.0.1
Mojarra 2.0.3
Java EE 6
修改
经过一番研究后,我了解到PrimeFaces允许您使用FileInputStream
来流式传输图像内容,并且您可以FileInputStream
使用绝对路径。这可能是一个很好的解决方案,直到我测试并发现这只能在RequestScoped和SessionScoped Bean上运行,但不适用于ViewScoped。
这是我发布的链接,以通知他们的开发人员这个主要的错误。 http://primefaces.prime.com.tr/forum/viewtopic.php?f=3&t=7052
还有其他想法吗?
答案 0 :(得分:3)
只需映射一个特殊的servlet,ImageServlet
映射到/image/*
(例如),并从中发送图像(将它们作为InputStream
,并将其写入回复OutputStream
)