Ich habe eine Ansicht wie so:Primefaces Form nicht aktualisiert im Dialog
<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" />
Und das ist, was dialog.xhtml wie folgt aussieht:
<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>
Aber die Schaltfläche speichern weigert sich einfach, das Produktformular zu aktualisieren. Es aktualisiert productFormMessages (was ich vermute, ist wegen der AutoUpdate), aber das Formular wird nicht aktualisiert. Ich muss eine Seite neu laden vom Browser, damit es die neuesten Daten widerspiegelt. Ich habe viele verschiedene Wege ausprobiert. 1. Verwenden Sie p: component, um im Attribut update direkt auf outputLabel zu verweisen. 2. (1) auch mit der Formular-ID und der panelGrid ID. 3. Verwenden Sie die vollständige Client-ID (mit und ohne vorangestelltes ':') im Update-Attribut. Ähnliches mit der Formular-ID und der panelGrid ID. 4. Die Client-ID zu den Render-IDs in der Bean hinzufügen und dann die update-Methode partialViewContext aufrufen. 4. partialViewContext # setRenderAll auf true setzen. 4. Und als letzter Versuch, wie der Code zeigt, Aktualisierung der gesamten Produktform. Was nicht so schlimm ist, denn fieldToUpdateId ist nur eines der Felder, die ich im Formular aktualisieren muss. Aber so oder so, es funktioniert nicht.
Offensichtlich werden die Daten auf dem Backend gespeichert, weil ein Neuladen der Seite mir die neuesten Daten gibt. Aber ich kann den Dialog nur nicht dazu bringen, das Formular, von dem aus er aufgerufen wird, zu aktualisieren. Ich habe keine Ideen mehr. Was mache ich falsch?
Sie verweisen auf das andere Formular korrekt. Überprüfen Sie Ihre Speichermethode, warum sie nicht aktualisiert wird. – tak3shi
Die Aktualisierungsreferenz des Dialogfeldformulars ist jedoch nicht korrekt. Es muss 'update = 'sein: dialogFormId" '. Haben Sie die IDs in Ihrem Browser getestet? Ist "ProductForm" das Top-Level? – Holger
Die Speichermethode ist riesig, daher ist es nicht sehr sinnvoll, sie zu komprimieren und hier zu speichern. Der Grund, warum ich aktualisiere: productForm ist, weil ich beim Speichern den Dialog schließe und die Meldung 'save successfully' auf productFormMessages anzeigt. Dies wird angezeigt. Ich bin mir sicher, dass die Speichermethode korrekt funktioniert hat. Und ja, ich habe die Client-IDs im Browser überprüft, productForm ist das Top-Level-Formular. – user1825770