【问题标题】:p:ConfirmDialog don't close p:dialogp:ConfirmDialog 不要关闭 p:dialog
【发布时间】:2013-08-22 01:50:31
【问题描述】:

好吧,我有一个关闭 p:dialog 的 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" 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>

【问题讨论】:

  • “硬编码监听器值”是什么意思?我不明白。
  • 尝试从对话框中删除appendToBody="true"
  • 我删除了一个 'appendToBody="true"' 并且 p:confirmDialog 不会自行关闭,也不会关闭 p:dialog。

标签: jsf primefaces


【解决方案1】:

"Sim" commandButton 中删除type="button"。因为onComplete 在类型为按钮时不会被调用。一般onComplete与ajax调用有关。

【讨论】:

  • 我删除了 type="button" 但问题仍然存在,没有调用 actionListener "cancelar"。
  • 一些解决方案?
【解决方案2】:

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

【讨论】:

  • 好吧,我认为“oncomplete”事件是在按钮中的所有进程完成后执行的:例如,ActionListener 和 Click 按钮。而“onclick”事件是第一个被触发的进程。想想看,我认为如果我使用“onclick”而不是“oncomplete”事件来“隐藏”confirmCancelar 将在 actionListener 之前提前调用
【解决方案3】:

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

您可以尝试输入:public void cancelar() 而不是 public void cancelar(ActionEvent event)

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

【讨论】:

    猜你喜欢
    • 2013-12-20
    • 2014-02-27
    • 2016-04-23
    • 1970-01-01
    • 2015-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-30
    相关资源
    最近更新 更多