0

好吧,我有关闭 p:dialog 的 ap:confirmDialog,但是当我尝试关闭 p:dialog 时,这是行不通的。

这是我的 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 取消器,但从未调用它。

编辑 1

伙计们,我更改了我的代码 p:confirmDialog (代码如下),但现在 p:dialog 正常关闭,但 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>
4

3 回答 3

0

Remove type="button" from "Sim" commandButton. Since onComplete won't be called when the type is button. Generally onComplete is related to ajax call.

于 2013-08-22T01:55:25.703 回答
0

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

你可以尝试把:public void cancelar()而不是public void cancelar(ActionEvent event).

如果你必须传递一个事件,我认为你应该使用actionListener而不是action。那是,actionListener="#{dentistaMB.cancelar}"

于 2013-10-27T15:39:00.823 回答
0

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

于 2013-08-22T06:33:16.167 回答