Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf p:ConfirmDialog don';t关闭p:对话框_Jsf_Primefaces - Fatal编程技术网

Jsf p:ConfirmDialog don';t关闭p:对话框

Jsf p:ConfirmDialog don';t关闭p:对话框,jsf,primefaces,Jsf,Primefaces,我有一个p:confirmDialog可以关闭p:dialog,但是当我试图关闭p:dialog时,它不起作用 这是我的p:confirmDialog代码: <p:confirmDialog id="confirmCancelar" message="Deseja cancelar ?" showEffect="fade" hideEffect="fade" header="Cancelar" severity="alert" widgetVar="conf

我有一个p:confirmDialog可以关闭p:dialog,但是当我试图关闭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>
当我单击“Não”按钮时,p:ConfirmDialog隐藏正常,但当我单击“Sim”按钮时,actionListener未被调用,我尝试调试actionListener cancelar,但它从未被调用

编辑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>


“Sim”命令按钮中删除
type=“button”
。因为当类型为button时,不会调用
onComplete
。通常,
onComplete
与ajax调用相关。

如果不需要特殊情况,请尝试将onComplete更改为onclick。这对我的情况很有帮助。

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

您可以尝试放置:
public void cancelar()
而不是
public void cancelar(ActionEvent事件)

如果你必须通过一个事件,我认为你应该使用actionListener而不是action
也就是说,
actionListener=“#{dentistaMB.cancelar}”

我删除了type=“button”,但问题仍然存在,actionListener“cancelar”没有被调用。有什么解决办法吗?你说的“硬编码侦听器值”是什么意思?我不明白。尝试删除
appendToBody=“true”
从对话框中删除。我删除了a'appendToBody=“true”’和p:confirmDialog不会自动关闭,也不会关闭p:dialog。我认为“oncomplete”事件是在所有process in按钮完成后执行的:例如,ActionListener和Click按钮。“onclick”事件是第一个被触发的进程。考虑一下,我认为如果我使用“onclick”而不是“oncomplete”,那么“隐藏”confirmCancelar的事件将在actionListener之前提前调用
<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>