Таким образом, у меня есть загрузка простых лиц в диалоге, подобном этому:
<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 загрузка работает, но это не вариант.
РЕДАКТИРОВАТЬ: Обновлено, чтобы добавить больше кода и лучшего описания