Primefaces表单不会从对话框中更新

时间:2016-05-24 21:59:42

标签: jsf jsf-2 primefaces

我有这样的观点:

<h:form id="productForm">
  <p:messages
    id="productFormMessages"
    autoUpdate="true"
    redisplay="true"
    globalOnly="true" />

  <p:panelGrid
     id="detailsGrid">
    <p:row>
      ...
      <p:column>
        ...
        <p:outputLabel
          id="fieldToUpdateId"
          value="XYZ" />
        <p:commandButton
          action="#{bean.prepareDialog}"
          update="dialogFormId"
          oncomplete="PF('dialogModal').show();" />
      </p:column>
    </p:row>
   </p:panelGrid>
</h:form>

<ui:include src="/../.../dialog.xhtml" />

这就是dialog.xhtml的样子:

<p:dialog
  id="dialogId"
  widgetvar="dialogModal"
  appendTo="@(body)"
  modal="true"
  dynamic="true">

<h:form
  id="dialogFormId">
  ...a selectOneMenu...

  <p:commandButton
     id="saveButtonId"
     value="Save"
     actionListener="#{bean.save}"
     oncomplete="PF('dialogModal').hide();"
     process="@form"
     update=":productForm" />
  </h:form>

但是保存按钮只是拒绝更新productForm。它确实更新了productFormMessages(我猜测是因为autoUpdate),但表单不会更新。我需要从浏览器重新加载页面,以便反映最新数据。我尝试了很多不同的方法。 1.使用p:component直接引用update属性中的outputLabel。 2.(1)还使用表单ID和panelGrid ID。 3.在update属性中使用完整的客户端ID(包含和不包含前面的“:”)。同样使用表单ID和panelGrid ID。 4.将客户端ID添加到bean中的呈现ID,然后在其上调用partialViewContext#update方法。 4.将partialViewContext#setRenderAll设置为true。 4.作为最后的尝试,如代码所示,更新整个productForm。这不是那么糟糕,因为fieldToUpdateId只是我需要在表单中更新的字段之一。但不管怎样,它都没有用。

显然,数据正在后端保存,因为页面重新加载会为我提供最新数据。但是我无法让对话框更新从中调用它的表单。我没有想法。我做错了什么?

1 个答案:

答案 0 :(得分:0)

理论上这应该可行,但是请检查Html源代码中的按钮,以确保它刷新的html的哪一部分。它应该有这样的东西。

的onclick =&#34; PrimeFaces.ab({S:&#39; dialogFormId:saveButtonId1&#39;,的 U:&#39; productForm&#39; 下,致癌:功能(XHR ,status,args){PF(&#39; dialogModal&#39;)。hide();;}}); return false;&#34;