oncomplete with commandButton 不工作

oncomplete with commandButton isn't working

我有一个嵌套的数据表,它有一个编辑命令按钮,显示了一个对话框模式,

<p:commandButton value="Edit" oncomplete="PF('editStudy').show()" type="button">
                <p:ajax event="click" listener="#{queryStudiesBean.setRenderDialog(true)}" update="editDialogStudy" />
                <p:ajax event="click" listener="#{queryStudiesBean.setEditableStudyIndex(studyIndex)}" update="editDialogStudy: />
                <p:ajax event="click" listener="#{queryStudiesBean.setEditablePatientIndex(patientIndex)}" update="editDialogStudy" />
</p:commandButton>

我正在解决更新后保持子数据表的行扩展的问题,我正在关注这个 answer ,但是我遇到了另一个问题,即一旦我加载数据表页面,甚至在我点击之前编辑按钮,具有更新属性的对话框命令按钮被评估,

<p:commandButton process="@form" update="@form,:form2:patient-dt:#{queryStudiesBean.editablePatientIndex}:study-dt" action="#{queryStudiesBean.updateStudy()}" oncomplete="PF('editStudy').hide()" value="Save" styleClass="fixed-button-size" />

,这给出了 null 错误,因为 patientIndex 仍然是 null,因为我什至没有单击数据表的编辑按钮来设置 patientIndex

所以我设法通过向对话框添加 rendered="#{queryStudiesBean.renderDialog}" 属性来解决这个问题。

现在我很难在编辑按钮操作中将此布尔值设置为 true,对话框现在不显示,在上面的代码中,我使用了 oncomplete,并在 (因为 action 属性和 <f:setPropertyActionListener> 对我都不起作用,我认为布尔值将在调用 oncomplete 之前设置为 true,因此对话框显示,但是没有发生,有人可以向我解释为什么吗?我看了很多帖子,但没有一个适合我。

full datatable code

full dialog code

我正在使用: primefaces 6.2, java8

如果您的 update="@form,:form2:patient-dt:#{queryStudiesBean.editablePatientIndex}:study-dt 引用了 parentIndex,则在呈现按钮时已调用它。

  1. 您的 update="editDialogStudy" 需要 update=":editDialogStudy" 因为它是 在数据表的一行内。

  2. 你更新了表单,但是呈现在表单之外,所以它 不会更新。在对话框周围放置 <h:panelGroup... 并更新 面板组