0

私はprimefacesデータテーブルで複数のレコード編集を行っています。レコード編集にはファイルのアップロードがあり、ユーザーが「追加」ボタンを押すとリセットされます

jsf コード:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:p="http://primefaces.org/ui">
    <h:head></h:head>
    <h:body>
        <h:form enctype="multipart/form-data">
            <p:dataTable var="file" value="#{fileUpload.files}" id="uploadTable">
                <p:column>
                    <p:inputText value="#{file.id}"/>
                    <p:inputText value="#{file.name}"/>
                    <p:fileUpload value="#{file.file}" mode="simple"/> 
                </p:column>
            </p:dataTable>
            <p:commandButton value="Add" action="#{fileUpload.add}" update="uploadTable" />
            <p:commandButton action="#{fileUpload.submit}" value="Submit" ajax="false" />
        </h:form>
    </h:body>
</ui:composition>

コントローラーは次のとおりです。

@ManagedBean(name = "fileUpload")
@ViewScoped
public class DummyFileUpload implements Serializable {

    private static final long serialVersionUID = 1L;

    private List<File> files;

    @PostConstruct
    public void init() {
        files = new ArrayList<DummyFileUpload.File>();
    }

    public void submit() {
        // submit
    }

    public void add() {
        files.add(new File());
    }

    public List<File> getFiles() {
        return files;
    }

    public void setFiles(List<File> files) {
        this.files = files;
    }

    public class File implements Serializable{

        private static final long serialVersionUID = 2685385696849425824L;
        private String id;
        private String name;
        private UploadedFile file;

        public String getId() {
            return id;
        }
        public void setId(String id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public UploadedFile getFile() {
            return file;
        }
        public void setFile(UploadedFile file) {
            this.file = file;
        }
    }

}

ajax 呼び出しを行うと、ファイル アップロード コントロールがリセットされます。これは正常な動作であることはわかっていますが、この状況に対する既知の回避策があるかどうか、およびこのような複雑なビジネスのベスト プラクティスは何かを尋ねています。

4

1 に答える 1