Jsf p:ConfirmDialog don';t关闭p:对话框
我有一个p:confirmDialog可以关闭p:dialog,但是当我试图关闭p:dialog时,它不起作用 这是我的p:confirmDialog代码: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 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>