アイテムを追加および削除できるようにしたいアイテムのリストがあります。そのために、リスト全体を a に追加し、アイテムを追加または削除するたびに、primefaces から update を呼び出します。コードは次のようになります。
<h:panelGroup id="group">
<ui:repeat value="#{manager.values}" var="item">
<p:inputText value="#{item.name}"/>
<p:commandButton value="Remove" action="#{manager.remove(item)}" onsuccess="update_values();"/>
</ui:repeat>
</h:panelGroup>
<p:remoteCommand update="group" name="update_values"/>
<p:commandButton value="Add" action="#{manager.newValue()}" update="group"/>
追加は正常に機能しますが、削除を呼び出すたびに動作が奇妙になります。一番右のアイテムが削除され、一番左のアイテムを削除しても、他のアイテムの名前は変更されません。
いくつかのデバッグの後、これは value="#{item.name}" が原因であることがわかりました: アイテムは正しく削除されますが、削除後、存在するフィールドの値はフィールドが持っていた値に設定されます前。全体として、ui:repeat の項目が 1 つ少ないため、最も右側のフィールドはもう存在しませんが、他の項目は以前の値を取得するため、最も右側のフィールドを削除することしかできません。
これを解決する方法のヒントはありますか?1 つの解決策は、JavaScript を使用してすべてのフィールドをクリアすることかもしれませんが、自分で何かをコーディングするよりも、フレームワークで問題を解決したいと考えています。