2017-03-22 9 views
0

처음에는 내 영어를 유감스럽게 생각합니다. 글쎄, 나는 각자 개별적으로 잘 작동하는 대화 상자를 응용 프로그램에 가지고있다. 그러나 하나의 대화 상자에서 다른 대화 상자를 호출해야 할 때,이 두 번째 대화 상자를 닫을 때 첫 번째 대화 상자를 닫을 때 문제가있다. 나는 primefaces에서 자바 API에 의해 그들을 생성합니다. 이 문제를 해결할 수있는 방법은 무엇입니까?프라임 (Primeface)의 다른 대화창을 통한 대화

편집 : 오른쪽, 나는 여기에 내 첫 번째 대화 호출

<h:outputLabel value="#{bundle.CreateProfissionalLabel_idRegraComissao}" /> 
<h:panelGroup> 
     <h:inputText readonly="true" value="#{profissionalController.selected.idRegraComissao.descricao}" id="nomeRegraComissao"/> 
     <p:commandButton value="#{bundle.Pesquisar}" action="#{searchRegraComissaoController.abrirDialogo()}" process="@this" update="@none"> 
      <p:ajax event="dialogReturn" listener="#{profissionalController.regraComissaoSelecionada}" process="@this" update="nomeRegraComissao"/> 
     </p:commandButton> 
</h:panelGroup> 

내 openDialog 방법 (searchRegraComissaoController.abrirDialogo은()) 첫 번째 대화입니다 : 이제

public void abrirDialogo() { 
    Map<String, Object> opcoes = new HashMap<>(); 
    opcoes.put("modal", true); 
    opcoes.put("resizable", false); 
    opcoes.put("contentHeight", 470);    
    RequestContext.getCurrentInstance().openDialog("/webapp/lovs/SearchRegraComissao", opcoes, null); 
} 

내가 가진 이 첫 번째 대화 상자에서 렌더링되고 두 번째 대화 상자를 여는 xhtml 파일 (/webapp/lovs/SearchRegraComissao.xhtml). 여기에 그것을 수행하는 방법은 다음과 같습니다

바로 여기
<p:outputLabel value="#{bundle.CreateRegraComissaoLabel_idClinica}" /> 
<p:panel> 
    <h:inputText readonly="true" value="#{searchRegraComissaoController.filtro.clinica.nome}" id="nomeClinica"/> 
    <p:commandButton value="#{bundle.Pesquisar}" actionListener="#{searchClinicaController.abrirDialogo()}" process="@this" update="@none"> 
      <p:ajax event="dialogReturn" listener="#{searchRegraComissaoController.clinicaSelecionada}" process="@this" update="nomeClinica"/> 
    </p:commandButton> 
</p:panel> 

, 그것은이 두 번째 대화 상자를 엽니 다 방법이 있습니다

public void abrirDialogo() { 
    Map<String, Object> opcoes = new HashMap<>(); 
    opcoes.put("modal", true); 
    opcoes.put("resizable", false); 
    opcoes.put("contentHeight", 450);   
    RequestContext.getCurrentInstance().openDialog("/webapp/lovs/SearchClinica", opcoes, null); 
} 

글쎄, 지금까지, 모든 것이 잘 작동 문제는 다음 단계에 . 이제 두 번째 대화 상자를 닫아야하는 메서드가 있습니다. 이 방법은 두 번째 대화 상자에서 데이터 테이블에 한 행을 선택 사용자 후 호출됩니다

<p:column headerText="#{bundle.Acao}"> 
    <p:commandButton value="#{bundle.Escolher}" process="@this" action="#{searchClinicaController.selecionar(clinica)}"/> 
</p:column> 

그리고 마지막 방법은 다음과 같습니다

public void selecionar(Clinica clinica) { 
    clinicas = new ArrayList<>(); 
    //todasClinicas = false; 
    // isCPF = "CPF"; 
    //nome = ""; 
    RequestContext.getCurrentInstance().closeDialog(clinica); 
} 

이 방법의 끝은 오류하지만 두 번째 대화없이 도달 닫히지 않았습니다. 누구든지 도울 수 있니?

해결책 : 프라임 스 페이스 가이드 6을 읽고 프라임 스 페이스 5를 사용했습니다. 프라임 엣지 5에서는 중첩 대화 상자가 지원되지 않습니다. 방금 버전을 6으로 업데이트했는데 이제는 잘 작동합니다.

+0

[A, 최소한의 완전하고 검증 예를 추가하세요] (https://stackoverflow.com/help/ mcve) –

+0

오른쪽에 코드를 추가했습니다. –

+0

닫으려고하는이 클리닉 매개 변수는 무엇입니까? 그건 나에게 맞지 않아. –

답변

0

저는 primefaces 5.2에서 같은 문제가있었습니다. 폼을 추가하고 두 번째 대화 상자에 modal = "true"및 appendTo = "@ (본문)" 을 추가하여 해결했습니다. 예를 따릅니다 :

main.xhtml

<h:body> 
    <h:form id="frmMain"> 
     <p:commandButton value="Open" 
         process="@this" update="frmMain:dialog1" 
         oncomplete="PF('wdgDialog1').show()"> 
     </p:commandButton> 
     <p:dialog id="dialog1" header="Dialog 1" 
        dynamic="true" modal="true" 
        widgetVar="wdgDialog1" > 
      <ui:include src="/dialog/dialog2.xhtml" /> 
     </p:dialog> 
    </h:form> 
</h:body> 

dialog2.xhtml

<ui:composition xmlns="http://www.w3.org/1999/xhtml" 
       xmlns:h="http://java.sun.com/jsf/html" 
       xmlns:f="http://java.sun.com/jsf/core" 
       xmlns:ui="http://java.sun.com/jsf/facelets" 
       xmlns:p="http://primefaces.org/ui"> 
    <p:dialog id="dialog2" header="Dialog 2" 
       modal="true" appendTo="@(body)" 
       widgetVar="wdgDialog" > 
     <h:form id="frmDialog"> 
      <p:panel>     
       <p:commandButton value="Test"/> 
      </p:panel> 
     </h:form> 
    </p:dialog>    
</ui:composition>