多くのファイルをアップロードしたいので、これには rich:fileUpload コントロールを選択しました。
私の問題は、各ファイルにさらに情報を追加する必要があることです。たとえば、そのファイルのアプリケーションに表示したいタイトルです。どうすればそれを行うことができ、id を使用するために fileUploadListener メソッドに送信できますか?
あなたの質問に基づいて、RichFaces FileUpload デモには、1 つ以上のファイルのファイル アップロードを同時に処理するために必要なすべての情報が含まれています。
さらにデータ (値など) を追加する場合は、代わりにタグ属性h:inputText
を使用して渡す必要があります。これは、ajax 呼び出し内で発生するイベントであるため、s は属性のセッターを呼び出さないためです。valueChangeListener
value
fileUploadListener
UIComponent
動作を説明するコード:
<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のようなロガーを使用します。