2012-06-22 42 views
0

我想上傳很多文件,並且我選擇了rich:fileUpload控件。rich:file上傳更多文件信息

我的問題是我需要爲每個文件添加更多信息,例如我想要在該文件的應用程序中出現的標題。我該怎麼做,併發送到fileUploadListener方法,以使用ID?

+0

你正在使用什麼RF版本? –

+0

RF版3.3.3 – QuickQuestion

回答

2

根據你的問題,RichFaces FileUpload demo有你需要的所有信息來同時處理一個或多個文件的文件上傳。

如果你想添加更多的數據(如h:inputText值等),那麼你應該通過他們使用valueChangeListener代替value標籤屬性,因爲fileUploadListener是一個Ajax調用中發生的一個事件,所以你UIComponent贏球」 t調用setter的屬性。

一些代碼來解釋行爲:

<h:panelGrid cols="2"> 
    <h:outputText value="File Title:"> 
    <h:inputText value="#{fileBean.fileTitle}" immediate="false" 
     valueChangeListener="#{fileBean.valueChangeFileTitle}" /> 
    <h:outputText value="File:"> 
    <rich:fileUpload 
     fileUploadListener="#{bean.fileUpload}"> 
    </rich:fileUpload> 
</h:panelGrid> 

的Bean來處理請求

public class Bean { 

    private String fileTitle; 

    public Bean() { 
    } 

    //getters and setters... 
    public String getFileTitle() { 
     return this.fileTitle; 
    } 

    public void setFileTitle(String fileTitle) { 
     System.out.println("Calling the setter"); 
     this.fileTitle = fileTitle; 
    } 

    public void valueChangeFileTitle(ValueChangeEvent e) { 
     System.out.println("Calling the ValueChangeListener"); 
     fileTitle = (String)e.getNewValue(); 
} 

    //this will be invoked by an ajax call 
    //the setter of the view won't be invoked for fileTitle 
    //instead, we should take its value using valueChangeListener 
    public void fileUpload(UploadEvent ue) { 
     MyFileManager mfm = MyFileManager.getFileManager(); 
     MyFile myFile = new MyFile(); 
     myFile.setTitle(this.fileTitle); 
     myFile.setName(ue.getUploadItem().getFileName()); 
     myFile.setData(ue.getUploadItem().getData()); 
     mfm.createFile(myFile); 
    } 
} 

此外,避免在代碼中使用System.out.println電話,我做的,所以你可以瞭解將調用什麼方法,而是使用類似Log4j的Logger。

+0

您好!感謝您的回覆。我不確定我是否完全符合我的意思。我希望每個文件都有一個文件標題的輸入文本,當我按下上傳按鈕時將此信息發送給處理程序。 – QuickQuestion

+0

你不能。您必須爲每個文件提供標題,您有兩種方法來執行此操作:1)爲用戶添加的每個文件添加一個文件輸入文本,2)一次爲一個文件詢問標題。我的例子是第二種方式。 –