gpt4 book ai didi

jsf-2 - 素面 p :dialog doesn't always show up if update ="dlg" in commandButton

转载 作者:行者123 更新时间:2023-12-04 17:10:47 26 4
gpt4 key购买 nike

我有一个像这样的 jsf facelet 页面(极其简化的版本):

    <h:form id="frmAnagPersonName">
<p:commandButton value="Edit" icon="ui-icon-gear"
update="@form :frmEdit"
onsuccess="_dlgEdit.show()"/>
...
<p:dataTable etc...
...


</h:form>

<p:dialog id="dlgEdit" widgetVar="_dlgEdit" dynamic="true" modal="true" closable="true"
header="Person Identity">
<h:form id="frmEdit" >
<p:panelGrid id="pnlEdit" columns="2">
<p:outputLabel id="lblName" for="eName" value="Name"/>
<p:inputText id="eName" value="#myBean.personName}"
</p:panelGrid>
</h:form>
</p:dialog>

它工作正常,直到我在对话框中放置了一个 dynamyc Header:
<p:dialog ... header="#{myBean.header}" ...  >  

此时我必须更改 update p:commandButton 中的属性:
update="@form :dlgEdit"  

但在这种情况下,对话框只会在第一次单击按钮时显示。不会出现第二次,然后再次出现......
为什么?如何让对话框始终显示?

谢谢

最佳答案

使用 oncomplete属性而不是 onsuccess属性。

<p:commandButton ... update="@form :dlgEdit" oncomplete="_dlgEdit.show()" />
onsuccess当 ajax 响应成功到达时直接调用属性,但在基于 ajax 响应执行 ajax 更新之前很久。 oncomplete当 ajax 更新成功完成时调用属性。另见 the tag documentation of <p:commandButton> .

基本上,这是事件调用顺序:
  • onclick处理程序被调用
  • ajax 请求是基于 process 用表单数据准备的
  • onbegin处理程序被调用
  • ajax请求发送
  • ajax响应成功获取(HTTP状态码为200)
  • onsuccess处理程序被调用
  • 基于 update 在 HTML DOM 中执行 ajax 更新
  • oncomplete处理程序被调用
  • 关于jsf-2 - 素面 p :dialog doesn't always show up if update ="dlg" in commandButton,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15028868/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com