我需要找到一些非常紧凑的组件,它允许我:
- 选择文件系统中的文件
- 获取其绝对路径(或文件本身)
我已经尝试过:
-
<rich:fileUpload>
组件,但对于如此简单的人员来说,它似乎不必要地强大,而且,它也不能返回 RF4 中的绝对路径(仅文件名)File
反对但FileUpload
对象 -
<input type="file"/>
但我不确定如何将所选文件的绝对路径传递给bean(我只能传递文件名) - 这可能吗? -
<p:fileUpload>
和<t:inputFileUpload>
也有点问题
注释:
- 用户始终直接在服务器上工作(没有客户端)-
localhost
(该应用程序是三层,但仅适用于一个用户) - 我正在使用
richfaces 4
解决这个问题的最佳或最紧凑的做法是什么?
更新(部分解决方案)
<h:commandLink value="fire" action="#{bean.action}"/>
<input type="file" id="fileName" name="fileName"/>
public void action() {
HttpServletRequest request = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();
fileName = request.getParameter("fileName");
}
但仍然没有绝对路径...
最佳答案
您可以使用fileUpload的fileUploadListener属性。例如
<rich:fileUpload fileUploadListener="#{managedBean.onFileUpload}"/>
如果您使用的是 RichFaces 3.*:
这需要在托管 bean 中实现一个方法,其签名必须与 void onFileUpload(org.richfaces.event.UploadEvent event)
匹配。通过引用 org.richfaces.event.UploadEvent 对象,您可以检索文件的绝对路径。像这样:
public void onFileUpload(UploadEvent event) {
//...
File file = event.getFile();
String absolutePath = file.getAbsolutePath();
//...
}
如果您使用的是 Rich Faces 4.*:
这需要在托管 bean 中实现一个方法,其签名必须与 void onFileUpload(org.richfaces.event.FileUploadEvent event)
匹配。通过引用 org.richfaces.event.FileUploadEvent 对象,您可以检索文件的绝对路径。像这样:
public void onFileUpload(FileUploadEvent event) {
//...
File file = event.getUploadedFile();
String absolutePath = file.getAbsolutePath();
//...
}
关于java - JSF 组件 - IN : pick file from server; OUT: file path only,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16298367/