在primefaces中的其他对话框上的对话框

时间:2017-03-22 02:05:19

标签: java primefaces dialog jsf-2.2

最初,抱歉我的英语。 好吧,我的应用程序中的对话框各自都能很好地工作,但是当我需要一个对话框来调用另一个对话框时,我在关闭第一个打开的第二个对话框时遇到问题。我是通过来自primefaces的java API创建它们的。什么能解决这个问题?

编辑: 是的,我在这里打电话给我的第一个对话:

<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);
}

好吧,到目前为止,一切正常,问题出在下一步。现在我有关闭第二个对话框的方法。用户在第二个对话框中选择一行到dataTable后调用此方法:

<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);
}

达到此方法的结尾没有错误,但第二个对话框未关闭。有人可以帮忙吗?

解决方案:我正在阅读primefaces 6的指南并使用primefaces 5.在primefaces中,不支持5个嵌套对话框。我刚刚将我的版本更新为6,现在工作正常。

1 个答案:

答案 0 :(得分:0)

今天我和primefaces 5.2有同样的问题。 我解决了添加一个表单和配置modal =“true”和appendTo =“@(body)” 在第二个对话框中。 例如:

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>