最初,抱歉我的英语。 好吧,我的应用程序中的对话框各自都能很好地工作,但是当我需要一个对话框来调用另一个对话框时,我在关闭第一个打开的第二个对话框时遇到问题。我是通过来自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,现在工作正常。
答案 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>