p:ConfirmDialog不关闭p:对话框

时间:2013-08-22 01:50:31

标签: jsf primefaces

好吧,我有一个p:confirmDialog关闭p:对话框,但是当我尝试关闭p:对话框时,那是行不通的。

这是我的p:confirmDialog代码:

<p:confirmDialog id="confirmCancelar" message="Deseja cancelar ?" showEffect="fade" hideEffect="fade"
                header="Cancelar" severity="alert" widgetVar="confirmCancelar" appendToBody="true">
                <p:commandButton value="Sim" update="messages"
                    oncomplete="confirmCancelar.hide()"
                    actionListener="#{dentistaMB.cancelar}" type="button" />
                <p:commandButton value="Não" update="messages"
                    onclick="confirmCancelar.hide()" type="button" />
            </p:confirmDialog>

我的actionListener是:

public void cancelar(ActionEvent event){
        dentista.setPessoaFisica(new PessoaFisica());
        dentista.getPessoaFisica().setSexo(new Sexo());
        dentista.getPessoaFisica().setEstadoCivil(new EstadoCivil());
        dentista.getPessoaFisica().setSituacao(new SituacaoPessoa());
        dentista.getPessoaFisica().setUf(new Uf());
        RequestContext.getCurrentInstance().execute("dialogCadastrar.hide()");
        addInfoMessage("Cancelado com sucesso");
    }

当我点击“Não”按钮时,p:ConfirmDialog隐藏正常,但是当我点击“Sim”按钮时没有调用actionListener,我尝试调试actionListener cancelar并且它从未被调用过。

编辑1

伙计们,我改变了我的代码p:confirmDialog(代码吼叫),但是现在p:对话框正常关闭,但是p:ConfirmDialog在屏幕上继续。

<p:confirmDialog id="confirmCancelar" 
                 message="Deseja cancelar ?"
                 showEffect="fade" hideEffect="fade" header="Cancelar"
                 severity="alert" widgetVar="confirmCancelar" 
                 appendToBody="true">
    <p:commandButton value="Sim" oncomplete="confirmCancelar.hide()"
                     action="#{dentistaMB.cancelar}"
                     update=":formAlterar" />
    <p:commandButton value="Não" onclick="confirmCancelar.hide()"
                     type="button" />
</p:confirmDialog>

3 个答案:

答案 0 :(得分:0)

type="button"移除"Sim" commandButton。由于类型为按钮时不会调用onComplete。通常onComplete与ajax调用有关。

答案 1 :(得分:0)

如果您不需要特殊情况,请尝试将oncomplete更改为onclick。它对我有帮助。

答案 2 :(得分:0)

如果您使用action(在您的情况下为action="#{dentistaMB.cancelar}"),我认为没有必要将事件作为参数传递给方法“cancelar”。这可能是您没有调用actionListener“cancelar”的原因。

您可以尝试使用public void cancelar()代替public void cancelar(ActionEvent event)

如果您必须传递活动,我认为您应该使用 actionListener 而不是操作。 也就是actionListener="#{dentistaMB.cancelar}"