stg*_*stg 2 jsf primefaces jsf-2
我的确认对话框出了问题.单击确认按钮后它不会关闭.如果我的表单位于选项卡视图中,则只会发生这种情况.(令人兴奋的是,如果我的表单不在标签视图中,但只有一个面板或类似的东西,那么一些代码可以正常工作.)
<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>
Run Code Online (Sandbox Code Playgroud)
如果我将"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;">
Run Code Online (Sandbox Code Playgroud)
将呈现一个与我的确认对话框具有相同ID的新div.结果是一个隐藏的确认diolog(如预期的那样),但是还有一个仍然可见的新对话框.如果我再次按下确认按钮,我有2个隐藏的符合对话框和1个可见对话框等等...
难道我做错了什么?你能发现任何错误吗?或者这可能是素数面板中的错误?
先谢谢你,Fant
其实我找到了解决问题的方法:
如果我尝试更新包含确认对话框的整个表单,则只会出现此问题.如果我只更新此表单中的某些特定区域,它可以正常工作.
对话框不应放在任何表单内,而应放在任何表单之外并具有自己的表单.
<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>
Run Code Online (Sandbox Code Playgroud)
这是因为对话框的HTML表示可能会在真实的HTML DOM树中移动到当前表单之外(正如您明确指出的那样appendToBody="true"
),这可能会在您遇到异步请求和更新期间导致"wtf"行为.
归档时间: |
|
查看次数: |
6640 次 |
最近记录: |