0

多くのファイルをアップロードしたいので、これには rich:fileUpload コントロールを選択しました。

私の問題は、各ファイルにさらに情報を追加する必要があることです。たとえば、そのファイルのアプリケーションに表示したいタイトルです。どうすればそれを行うことができ、id を使用するために fileUploadListener メソッドに送信できますか?

4

1 に答える 1

2

あなたの質問に基づいて、RichFaces FileUpload デモには、1 つ以上のファイルのファイル アップロードを同時に処理するために必要なすべての情報が含まれています。

さらにデータ (値など) を追加する場合は、代わりにタグ属性h:inputTextを使用して渡す必要があります。これは、ajax 呼び出し内で発生するイベントであるため、s は属性のセッターを呼び出さないためです。valueChangeListenervaluefileUploadListenerUIComponent

動作を説明するコード:

<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のようなロガーを使用します。

于 2012-06-23T15:29:44.023 に答える