我遇到这种情况:我在尝试从托管bean中添加新的头像之前删除旧的头像图像.
String fileName = "resources/img/useravatars/" + getSessionBean().getSearchAccount().getAvatar();
File f = new File(fileName);
我已经google了一下,似乎我可以从ExternalContext获取该文件夹的路径,如:
FacesContext facesContext = FacesContext.getCurrentInstance();
facesContext.getExternalContext(). ...
但我找不到类文档中的适当方法.你能帮忙说些什么而不是...或建议一个更好的解决方案.
PS.不知何故,我怀疑有可能对链接进行硬编码,但到目前为止还没有运气.
Bal*_*usC 28
我知道该文件嵌入在WAR中,并且您正在寻找ExternalContext#getRealPath()基于Web相对路径解析它的方法.根据Javadoc,此方法在JSF 2.0中引入,在JSF 1.x中不存在.你似乎在使用JSF 1.x,否则你不会问这个问题.您需要使用ServletContext#getRealPath()(这也是新JSF 2.0方法委托给的,在幕后).
String relativeWebPath = "/resources/img/useravatars/" + ...;
ServletContext servletContext = (ServletContext) externalContext.getContext();
String absoluteDiskPath = servletContext.getRealPath(relativeWebPath);
File file = new File(absoluteDiskPath);
// ...
但是,有一个很大但是:你可以而且不应该写入扩展的WAR.删除文件也是写作.每当您重新部署WAR或重新启动服务器时,每个更改都将被还原,扩展的WAR将保持其初始状态,从而丢失自上次部署以来在扩展的WAR中所做的所有更改.
您确实需要将这些文件存储在外部位置,然后可以在某些外部配置(属性)文件中对其根位置进行硬编码或定义.这样你就可以java.io.File通常的方式使用东西了.
有几种方法可以从外部位置提供文件.您可以在以下问题的答案中找到它们:使用<h:graphicImage>或<img>标签从webapps/webcontext/deploy文件夹外部加载图像
| 归档时间: | 
 | 
| 查看次数: | 28128 次 | 
| 最近记录: |