我有这样的观点:
<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只是我需要在表单中更新的字段之一。但不管怎样,它都没有用。
显然,数据正在后端保存,因为页面重新加载会为我提供最新数据。但是我无法让对话框更新从中调用它的表单。我没有想法。我做错了什么?
答案 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;