gpt4 book ai didi

jsf - 触发操作后,选项卡 View 中的 Primefaces 确认对话框不会隐藏

转载 作者:行者123 更新时间:2023-12-01 02:46:38 26 4
gpt4 key购买 nike

我的确认对话框有问题。单击确认按钮后它不会关闭。只有在我的表单处于选项卡 View 中时才会发生这种情况。 (如果我的表单不在选项卡 View 中,而只是面板或类似的东西,那么某些代码可以正常工作。)

        <h:form id="timingTableForm">
<p:dataTable var="item" value="#{requestBean.rmRequest.timingList}" id="timingDataTable" editable="true">
// some dataTable
</p:dataTable>
<p:confirmDialog closable="true" appendToBody="true" id="confirmDialog" message="#{msg.conf_deleteyesno}" header="#{msg.conf_header}" severity="alert" widgetVar="confirmation">
<p:commandButton id="confirm" value="#{msg.btn_yessure}" update="timingTableForm" oncomplete="confirmation.hide()" actionListener="#{requestBean.deleteTiming}" process="@this"/>
<p:commandButton id="decline" value="#{msg.btn_notyet}" onclick="confirmation.hide()" type="button" />
</p:confirmDialog>
</h:form>

如果我将“oncomplete”更改为“onclick”,它也可以正常工作,但我希望对话框在服务器端操作完成之前不消失。

当我按下确认按钮时,生成的 HTML 中发生了一些奇怪的事情:

<div id="mainTabView:timingTableForm:confirmDialog" class="ui-confirm-dialog ui-dialog ui-widget ui-widget-content ui-overlay-hidden ui-corner-all ui-shadow" style="width: auto; height: auto;">

<div id="mainTabView:timingTableForm:confirmDialog" class="ui-confirm-dialog ui-dialog ui-widget ui-widget-content ui-corner-all ui-shadow ui-overlay-visible" style="width: auto; height: auto; left: 994.5px; top: 186px; visibility: visible; z-index: 1006;">

呈现了一个与我的确认对话框具有相同 ID 的新 div。结果是一个隐藏的确认对话框(正如预期的那样),但还有一个仍然可见的新对话框。如果我再次按下确认按钮,我有 2 个隐藏的一致性对话框和 1 个可见的对话框等等...

我做错了什么吗?你能发现任何错误吗?或者这可能是 primefaces 中的错误?

  • Primefaces 3.4.1
  • 在 GlassFish 3.1.2 上运行
  • 浏览器 Firefox 16.0.2

先谢谢你,范


实际上我找到了解决问题的办法:

只有当我尝试更新还包含确认对话框的整个表单时才会出现问题。如果我只更新此表单中的某些特定区域,则效果很好。

最佳答案

对话框不应放在任何窗体内部,而应放在任何窗体外部并有自己的窗体。

<h:form id="timingTableForm">
<p:dataTable var="item" value="#{requestBean.rmRequest.timingList}" id="timingDataTable" editable="true">
// some dataTable
</p:dataTable>
</h:form>

<p:confirmDialog closable="true" appendToBody="true" id="confirmDialog" message="#{msg.conf_deleteyesno}" header="#{msg.conf_header}" severity="alert" widgetVar="confirmation">
<h:form>
<p:commandButton id="confirm" value="#{msg.btn_yessure}" update="timingTableForm" oncomplete="confirmation.hide()" actionListener="#{requestBean.deleteTiming}" process="@this"/>
<p:commandButton id="decline" value="#{msg.btn_notyet}" onclick="confirmation.hide()" type="button" />
</h:form>
</p:confirmDialog>

这是因为对话框的 HTML 表示可能会在真实的 HTML DOM 树中移动到当前表单之外(正如您通过 appendToBody="true" 明确所做的那样),这可能会导致“wtf”异步请求和更新期间的行为,如您所见。

关于jsf - 触发操作后,选项卡 View 中的 Primefaces 确认对话框不会隐藏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13531389/

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