2013-04-30 41 views
0

我需要找到一些非常緊湊的組件,它允許我:JSF組件 - IN:從服務器挑選文件; OUT:文件路徑只有

  • 在文件系統
  • 選擇文件獲取其絕對路徑(或文件本身)

我試過了:

  • <rich:fileUpload>組件,但它似乎是不必要的健壯的成功^ h簡單的工作人員,以及更重要的是,它不能在RF4返回絕對路徑(只是文件名)既不File對象,但FileUpload對象
  • <input type="file"/>,但我不知道如何選擇的文件的絕對路徑傳遞到這個bean(我能夠傳遞一個名字o文件) - 有可能嗎?
  • <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"); 
} 

但仍然沒有絕對路徑...

+0

你想要路徑客戶端或上傳的文件(一次在服務器上)? – 2013-04-30 16:51:32

回答

1

可以使用的FileUploadfileUploadListener屬性。例如

<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(); 
    //... 
} 

如果您使用豐富的面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(); 
    //... 
} 
+0

謝謝。但是這個'File file = event。getFile();'現在不起作用 – gaffcz 2013-04-30 11:37:24

+0

RichFaces 4.x中缺少UploadEvent :-( – gaffcz 2013-04-30 11:38:41

+0

哦,你應該說你正在使用RichFaces4(或者我沒有仔細閱讀過這個問題)。 '更新答案 – 2013-04-30 11:40:36