p:对象在ajax =“false”的提交验证错误时关闭,如何保持对话框
我有以下< p:dialog>
<p:dialog id="dlgDownload" header="#{appmsg['header.download.popup']}" widgetVar="downloadDlg" resizable="true" modal="true" closable="true" width="640" dynamic="false"> <h:form id="frmDownload"> <ui:include src="downloadDialog.xhtml" /> </h:form> </p:dialog> 包含文件包含以下下载按钮: <p:commandButton id="btnDlgDownload" value="#{appmsg['action.download.label']}" title="#{appmsg['action.download.label']}" icon="ui-icon-arrowthickstop-1-s" ajax="false" oncomplete="if (!args.validationFailed){downloadDlg.hide();} else {downloadDlg.show();}" process="@this" update=":#{p:component('pnlDownload')}" > <p:fileDownload value="#{downloadController.downloadFile()}" /> </p:commandButton> 这使用< p:fileDownload>为了下载文件,这意味着我必须使用ajax =“false”作为< p:fileDownload>引起. 但是如果对话框中存在验证失败,那么我会看到对话框窗口关闭.我希望错误消息显示在对话框窗口中而不是主页面中. 如何保持对话框打开,以便我可以在对话框窗口中显示错误消息? @Balusc请找我对SSCCE的尝试 <p:messages id="globalMessages" globalOnly="true" showDetail="true" showSummary="true" closable="true" /> <h:form = "parentForm" > <p:commandButton id="btnDownload" value="Download" title="Download" icon="ui-icon-arrowthickstop-1-s" onclick="downloadDlg.show();"> </p:commandButton> </h:form> <p:dialog id="dlgDownload" header="Download" widgetVar="downloadDlg" resizable="true" modal="true" closable="true" width="640" dynamic="false" visible="#{frmDownload.submitted and facesContext.validationFailed}"> <h:form id="frmDownload" binding="#{frmDownload}"> <ui:include src="downloadDialog.xhtml" /> </h:form> </p:dialog> 在里面下载Dialog.xhtml <ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:p="http://primefaces.org/ui" xmlns:pe="http://primefaces.org/ui/extensions"> <p:outputPanel id="pnlDownload"> <h:panelGrid id="dateDisplayGrid" columns="4" style="margin-bottom:10px" cellpadding="5" rendered="#{downloadForm.displayDates}"> <p:calendar id="strtdt" readonlyInput="true" size="12" value="#{downloadForm.startDate}" > </p:calendar> <h:outputText value="#{appmsg['label.to']}" /> <p:calendar id="enddt" readonlyInput="true" size="12" value="#{downloadForm.endDate}" pattern="#{dateFormatting.shortDateFormat}" navigator="true" > <f:validator validatorId="dateRangeValidator" /> <f:attribute name="startDate" value=":#{p:component('strtdt')}" /> </p:calendar> <p:message id="dateError" for="enddt" showDetail="true" showSummary="false"></p:message> </h:panelGrid> <p:commandButton id="btnDlgDownload" value="Download" title="Download" icon="ui-icon-arrowthickstop-1-s" ajax="false" oncomplete="if(!args.validationFailed)downloadDlg.hide();" > <p:fileDownload value="#{downloadController.downloadFile()}" /> </p:commandButton> <p:button id="btnDlgCancel" value="#{webmsg['action.cancel']}" onclick="downloadDlg.hide(); return false" href="#" /> </p:panel> </p:outputPanel> </ui:composition> 当我点击对话框窗口上的下载按钮时,错误将显示在父html上,并且对话框保持关闭状态.但是,当我点击父页面上的下载按钮时,对话框窗口重新出现并在内部对话框窗口中包含错误消息. 谢谢你的帮助. 解决方法
如果将downloadFile方法的一部分委托给另一个方法怎么办?
在这种情况下,您需要使用ajax调用的另一种方法(让我们称之为prepareDownloadFile).完成此方法后,您可以检查错误.如果一切顺利,您可以调用remoteCommand(使用ajax = false)将文件发送给用户. 另一个想法是使用iframe.看看这个post. 希望有所帮助! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |