我的确认对话框出了问题。单击确认按钮后它不会关闭。如果我的表单位于选项卡视图中,则只会发生这种情况。 (如果我的表单不在标签视图中,而只是一个面板或类似的东西,那么一些代码可以正常工作。)
<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。结果是一个隐藏的确认diolog(如预期的那样),但是还有一个仍然可见的新对话框。 如果我再次按下确认按钮,我有2个隐藏的符合对话框和1个可见对话框等等......
我做错了吗?你能发现任何错误吗?或者这可能是表面中的错误?
提前谢谢你, 凡特
实际上我找到了解决问题的方法:
如果我尝试更新包含确认对话框的整个表单,则只会出现此问题。如果我只更新此表单中的某些特定区域,则可以正常工作。
答案 0 :(得分:6)
对话框不应放在任何表格内,而应放在任何表格之外,并有自己的表格。
<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"
明确指出的那样),这可能导致&#34; wtf&#34;正如您所经历的那样,异步请求和更新期间的行为。