Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JSF数据表和文件上传(文件上传问题)_Jsf_File Upload_Datatable_Javabeans - Fatal编程技术网

JSF数据表和文件上传(文件上传问题)

JSF数据表和文件上传(文件上传问题),jsf,file-upload,datatable,javabeans,Jsf,File Upload,Datatable,Javabeans,请告诉我你的建议。我想构建具有特定设计的fileUpload,并且在获取上传文件时遇到问题 我的设计: 数据模型类: @Named @SessionScoped public class NJDataModel implements Serializable { private static final long serialVersionUID = 1L; private String sectionName; private UploadedFile file;

请告诉我你的建议。我想构建具有特定设计的fileUpload,并且在获取上传文件时遇到问题

我的设计:

数据模型类:

@Named
@SessionScoped
public class NJDataModel implements Serializable {
    private static final long serialVersionUID = 1L;

    private String sectionName;
    private UploadedFile file;

    public NJDataModel(String sectionName) {
        this.sectionName = sectionName;
    }

    public String getSectionName() {
        return sectionName;
    }

    public void setSectionName(String sectionName) {
        this.sectionName = sectionName;
    }

    public UploadedFile getFile() {
        return file;
    }

    public void setFile(UploadedFile file) {
        this.file = file;
    }
}

数据类:

@ManagedBean(name = "NJData")
@SessionScoped
public class Data implements Serializable {
    private static final long serialVersionUID = 1L;

    private List<NJDataModel> dataModel;

    @PostConstruct
    public void init() {
        /** defaults */
        dataModel = new ArrayList<NJDataModel>();
        dataModel.add(new NJDataModel("Title page"));
    }

    public void upload() {
        System.out.println("upload method triggered");
        String msg = null;
        for (NJDataModel i : dataModel) {
            UploadedFile file = i.getFile();
            // ERROR: file is always null? so could not get hold of file
            if (file != null) {
                System.out.println("Uploaded file:" + file.getFileName());
                msg += "file:" + file.getFileName() + "size:" + file.getSize() + ", ";
            }
        }
        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(msg));
    }
}

您不能用这样的一个命令按钮提交整个数据表。我建议使用primefaces的incell编辑组件。我会尝试一下,让你知道。作为旁注,我已经记住了fileUploadHandler事件。。。
<p:dataTable var="item" value="#{NJData.dataModel}"
    draggableColumns="true">
    <p:column>
        <p:panel>
            <f:facet name="header">
                <h:outputText value="#{item.sectionName}" />
            </f:facet>
            <p:fileUpload value="#{item.file}" mode="simple" />
        </p:panel>
    </p:column>
</p:dataTable>

<p:commandButton value="Submit" ajax="false"
    actionListener="#{NJData.upload}" />
file object:null & section name:first page
file object:null & section name:second page