JSF 2.2 Command-Button закрывает диалоговое окно

Я использую 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>

Я понятия не имею, почему кнопка загрузки закрывает диалог, а кнопка удаления - нет. Что здесь не так?


person Nik    schedule 06.06.2014    source источник
comment
Ваша кнопка загрузки файла имеет ajax=false. Вы можете изменить его на запрос ajax, но имейте в виду stackoverflow.com/questions/19262356/ и stackoverflow.com/questions/19996774/   -  person Aneta Stępień    schedule 07.06.2014
comment
Я пробовал их, но безуспешно. Я сделаю это на странице, диалоговое окно и загрузка файла не будут сочетаться друг с другом. спасибо Ник.   -  person Nik    schedule 07.06.2014
comment
ajax=false необходим при использовании fileUpload. Но без использования ajax вся ваша страница перезагружается после запроса, что означает, что dialog будет закрыто. Итак, вы уже поняли, что fileUpload плюс dialog — плохая комбинация.   -  person LarsBauer    schedule 07.06.2014