Проблемы с загрузкой Primefaces внутри диалогов - PullRequest
0 голосов
/ 29 апреля 2020

Таким образом, у меня есть загрузка простых лиц в диалоге, подобном этому:

<p:dialog header="Upload File" widgetVar="upload-dialog" modal="true" minHeight="300" width="600" appendTo="@(body)">
            <div class="ui-g">
                <div class="ui-g-12 file-upload-dialog-body">
                    <p:selectOneMenu id="document-type-selection" value="#{data.controller.selectedType}">
                        <f:selectItems value="#{data.controller.documentTypes}" var="documentType" itemValue="#{documentType}" itemLabel="#{documentType}"></f:selectItems>
                    </p:selectOneMenu>
                    <p:fileUpload styleClass="batch-upload" auto="true" showButtons="false" fileUploadListener="#{data.controller.upload}" oncomplete="PF('upload-dialog').hide()"></p:fileUpload>
                </div>
            </div>
            <div class="ui-g">
                <div class="ui-g-12">
                    <p:commandButton type="button" onclick="PF('upload-dialog').hide()" value="Cancel" ></p:commandButton>
                </div>
            </div>
        </p:dialog>

В Chrome, когда я хочу загрузить файл, он показывает выбор файла дважды. На firefox вообще ничего не показывает. Кто-нибудь когда-нибудь сталкивался с подобной проблемой?

В этом файле больше ничего нет, так что тут мало что можно сделать, но вот бин Java, поддерживающий его:

public class FileActionsComponentController {
    private DocumentType selectedType = DocumentType.OTHER;
    private Batch batch;
    private Document selectedDocument;
    private BatchService batchService = new BatchService();

    public void refresh() {

    }

    public Document getProductionPlanningDocument() {
        Document doc = batchService.getBatchProductionPlanningDocument(batch);
        if (doc == null) {
            doc = new Document();
        }
        return doc;
    }

    public Document getDeliveryNoteDocument() {
        Document doc = batchService.getBatchDeliveryNoteDocument(batch);
        if (doc == null) {
            doc = new Document();
        }
        return doc;
    }

    public List<Document> getOtherDocuments() {
        return batchService.getBatchOtherDocuments(batch);
    }

    public void upload(FileUploadEvent event) throws IOException {
        UploadedFile uploadedFile = event.getFile();
        if (uploadedFile != null) {

            Document doc = DocumentService.getInstance().writeFileToDocument(uploadedFile.getFileName(),
                    uploadedFile.getInputstream(),uploadedFile.getContentType(), selectedType);
            if (doc != null) {
                batch.addDocument(doc);
            }
        }
    }

    public List<DocumentType> getDocumentTypes() {
        return Arrays.asList(DocumentType.values());
    }

    public StreamedContent downloadFile(Document doc) {
        ((HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse()).setHeader("Content-disposition", "inline; filename=" +doc.getFileName());
        return StreamedContentUtils.getDocumentAsStreamedContent(doc);
    }

    public Batch getBatch() {
        return batch;
    }

    public void setBatch(Batch batch) {
        this.batch = batch;
    }

    public DocumentType getSelectedType() {
        return selectedType;
    }

    public void setSelectedType(DocumentType selectedType) {
        this.selectedType = selectedType;
    }

    public StreamedContent getDeliveryNoteFile() {
        return StreamedContentUtils.getDocumentAsStreamedContent(batch.getDeliveryNoteDocument());
    }

    public StreamedContent getProductionPlanningFile() {
        return StreamedContentUtils.getDocumentAsStreamedContent(batch.getProductionPlanningDocument());
    }

    public Document getSelectedDocument() {
        return selectedDocument;
    }

    public void setSelectedDocument(Document selectedDocument) {
        this.selectedDocument = selectedDocument;
    }

    public StreamedContent downloadSelected() {
        return StreamedContentUtils.getDocumentAsStreamedContent(selectedDocument);
    }

    public void stageDownload() {

    }

Primefaces версия 7.0, но мы используем провайдер фреймворка, который ее связывает, поэтому я не могу найти версию младшего выпуска.

Нет консольных журналов; запросы, которые go выходят (когда они есть), работают нормально, но chrome требует, чтобы я выбрал файл дважды, а firefox даже не позволяет загружать.

В качестве примечания, простой, не ajax загрузка работает, но это не вариант.

РЕДАКТИРОВАТЬ: Обновлено, чтобы добавить больше кода и лучшего описания

...