Я использую Primeface 5.0, Glassfish 4. В этом диалоговом окне я показываю список документов, которые можно прикрепить к набору данных. Загрузка файла работает, и процедура кнопки загрузки запускается для сохранения загруженного файла. Но после завершения действия кнопки-команды список данных обновляется и диалог закрывается, но этого не должно быть. Кнопка «удалить» работает нормально и обновляет список данных.
DlgVArEntryEdit.xhtml:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui"
xmlns:ui="http://java.sun.com/jsf/facelets">
<ui:composition>
<p:dialog id="VArEntryViewDlg"
widgetVar="VArEntryViewDialog"
resizable="false"
showEffect="fade"
hideEffect="explode"
modal="true"
header="Buchung">
<h:form id="VArEntryViewDlgFrm" enctype="multipart/form-data">
<p:panelGrid rendered="#{arEntryController.selected != null}">
<p:row>
<p:column><p:outputLabel value="Buchungs-ID:"/></p:column>
<p:column><p:outputLabel value="#{arEntryController.selected.arEntryId}" /></p:column>
</p:row>
<p:row>
<p:column><p:outputLabel value="Buchnungs-No:"/></p:column>
<p:column><p:outputLabel value="#{arEntryController.selected.entryNo}" /></p:column>
</p:row>
<p:row>
<p:column><p:outputLabel value="Storniert :"/></p:column>
<p:column><p:selectBooleanCheckbox value="#{arEntryController.selected.isCancelled}" /></p:column>
</p:row>
<p:row>
<p:column><p:outputLabel value="Buchnugsreferenz"/></p:column>
<p:column><p:outputLabel value="#{arEntryController.selected.receiptNo} / #{arEntryController.selected.receiptType}"/></p:column>
</p:row>
<p:row>
<p:column><p:outputLabel value="#{bundle.entryCode}"/></p:column>
<p:column><p:outputLabel value="#{arEntryController.selected.entryCodeName}"/></p:column>
</p:row>
<p:row>
<p:column><p:outputLabel value="Datum"/></p:column>
<p:column><p:calendar value="#{arEntryController.selected.entryDate}" size="10" pattern="dd.MM.yyyy" showOn="button"/></p:column>
</p:row>
<p:row>
<p:column><p:outputLabel value="#{bundle.entryText}"/></p:column>
<p:column><p:inputText value="#{arEntryController.selected.entryData}" size="100"/></p:column>
</p:row>
<p:row>
<p:column><p:outputLabel value="#{bundle.Comment}"/></p:column>
<p:column><p:inputTextarea rows="5" cols="100" value="#{arEntryController.selected.entryComment}"/></p:column>
</p:row>
<p:row>
<p:column colspan="2">
<h:panelGroup id="uploadDataListId">
<p:dataTable id="UploadDatalist"
value="#{arEntryController.documents}"
var="item"
selection="#{arEntryController.documentSelected}"
rowKey="#{item.documentId}"
style="width: 400px"
>
<p:column headerText="#" style="width: 5%; text-align: center">
<p:outputLabel value="#{item.documentId}"/>
</p:column>
<p:column headerText="#{bundle.DocumentName}" style="text-align: left">
<p:outputLabel value="#{item.documentName}"/>
</p:column>
<p:column style="width:7%;text-align: center">
<p:commandButton update=":VArEntryViewDlgFrm:UploadDatalist"
action="#{arEntryController.removeDocument}"
icon="ui-icon-trash"
title="Löschen"
process="@this">
<f:setPropertyActionListener value="#{item}" target="#{arEntryController.documentSelected}" />
</p:commandButton>
</p:column>
</p:dataTable>
<p:fileUpload id="fileUploadId" value="#{arEntryController.file}" mode="simple" />
<p:commandButton update=":VArEntryViewDlgFrm:uploadDataListId"
process=":VArEntryViewDlgFrm:fileUploadId"
actionListener="#{arEntryController.upload}"
ajax="false"
value="Upload"/>
</h:panelGroup>
</p:column>
</p:row>
<p:row>
<p:column><p:outputLabel value="geladene #{bundle.DocumentCount}"/></p:column>
</p:row>
<p:row>
<p:column><p:outputLabel value="Netto"/></p:column>
<p:column><p:inputText value="#{arEntryController.selected.amountNet}">
<f:convertNumber currencySymbol="€" groupingUsed="true"
maxFractionDigits="2" type="currency" />
</p:inputText></p:column>
</p:row>
<p:row>
<p:column><p:outputLabel value="USt-Code"/></p:column>
<p:column><p:inputText value="#{arEntryController.selected.GSTName}"/></p:column>
</p:row>
<p:row>
<p:column><p:outputLabel value="USt"/></p:column>
<p:column><p:inputText value="#{arEntryController.selected.amountGst}">
<f:convertNumber currencySymbol="€" groupingUsed="true"
maxFractionDigits="2" type="currency" />
</p:inputText></p:column>
</p:row>
<p:row>
<p:column><p:outputLabel value="Brutto"/></p:column>
<p:column><p:inputText value="#{arEntryController.selected.amountTotal}">
<f:convertNumber currencySymbol="€" groupingUsed="true"
maxFractionDigits="2" type="currency" />
</p:inputText></p:column>
</p:row>
</p:panelGrid>
<p:commandButton value="#{bundle.Cancel}"
style="float:right;"
process="@this"
actionListener="#{arEntryController.closeDlg}"
update=":formCenter :growl"
onclick="PF('VArEntryViewDialog').hide()"/>
<p:commandButton value="#{bundle.Delete}"
style="float:right;"
process="@this"
actionListener="#{arEntryController.remove}"
update=":formCenter :growl"
oncomplete="PF('VArEntryViewDialog').hide()"/>
<p:commandButton value="#{bundle.Change}"
style="float:right;"
actionListener="#{arEntryController.updateEntry}"
update=":formCenter :growl"
oncomplete="PF('VArEntryViewDialog').hide()"/>
</h:form>
</p:dialog>
</ui:composition>
</html>
Я понятия не имею, почему кнопка загрузки закрывает диалог, а кнопка удаления - нет. Что здесь не так?
ajax=false
необходим при использованииfileUpload
. Но без использования ajax вся ваша страница перезагружается после запроса, что означает, чтоdialog
будет закрыто. Итак, вы уже поняли, чтоfileUpload
плюсdialog
— плохая комбинация. - person LarsBauer   schedule 07.06.2014