rich:fileUpload更多文件信息

时间:2012-06-22 14:41:04

标签: jsf upload richfaces

我想上传很多文件,我选择了rich:fileUpload控件。

我的问题是我需要为每个文件添加更多信息,例如我想要在该文件的应用程序中显示的标题。我该怎么做,并发送到fileUploadListener方法,以使用id?

1 个答案:

答案 0 :(得分:2)

根据您的问题,RichFaces FileUpload demo包含您同时处理一个或多个文件的文件上传所需的所有信息。

如果您想要添加更多数据(例如h:inputText值和其他数据),则应使用valueChangeListener代替value代码属性来传递它们,因为fileUploadListener是在ajax调用中发生的事件,因此您的UIComponent不会调用属性的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这样的记录器。