2013-04-22 4 views
5

내가 다음 <p:dialog>p : ajax = "false"인 제출의 유효성 검증 오류에서 대화 상자가 닫히고 대화 상자를 열어 두는 방법?

<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>를 사용, 이것은 내가 실행하는 데 <p:fileDownload>에 대한 ajax="false"를 사용하는 것을 의미합니다.

하지만 대화 상자에 유효성 검사 오류가있는 경우 대화 상자 창이 닫히는 것을 볼 수 있습니다. 오류 메시지가 대화 상자 창에 표시되고 기본 페이지에는 표시되지 않도록하려고합니다.

대화 상자 창에 오류 메시지를 표시 할 수 있도록 대화 상자를 열어 두는 방법은 무엇입니까? SSCCE 에 내 시도를 찾아주세요


@Balusc는 기본적으로 parent.xhtml이있는 곳 다운로드 버튼 상주과 ​​p에 포함 된 downloadDialog.xhtml가 : 대화 상자가

<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> 

내부 downloadDialog .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에 표시되고 대화 상자가 닫힌 채로 유지됩니다. 그러나 부모 페이지에서 다운로드 버튼을 누르면 대화 상자 창이 다시 나타나고 내부 대화 상자에 오류 메시지가 나타납니다.

도움 주셔서 감사합니다.

답변

1

다운로드 파일 메서드의 일부를 다른 방법으로 위임하면 어떻게 될까요?

이 경우 ajax를 사용하여 호출 할 수있는 다른 메서드가 필요합니다 (prepareDownloadFile). 이 방법이 완료되면 오류를 확인할 수 있습니다. 모든 것이 잘 진행되는 경우 remoteCommand (ajax = false)를 호출하여 파일을 사용자에게 보낼 수 있습니다.

또 다른 아이디어는 iframe을 사용하는 것입니다. 이 post을 확인하십시오.

희망 하시겠습니까?

관련 문제