オブジェクトを追加および削除する動的な dataTable があります。ajax を使用しない場合、これは正常に機能します。しかし、ajax を使用すると問題が発生します。最初に値を追加しても問題ありません。ただし、オブジェクトの削除を開始すると、最後のオブジェクトを削除すると、項目リストも削除されて null になります。私はプライムフェイスでjsf 2.2を使用しています。この問題の原因がわかりません。私のコードは次のとおりです。
item.xhtml
<h:panelGroup id="list">
<h:dataTable value="#{item.items}" var="object">
<h:column>
<!-- Figure out what these facets are or delete them -->
<f:facet name="keys">Keys</f:facet>
<p:inputText value="#{object.x}" />
</h:column>
<h:column headerText="Values">
<f:facet name="values">Values</f:facet>
<p:inputText value="#{object.y}" />
</h:column>
<h:column>
<h:commandLink value="Delete" action="#{user.removeObject(object)}">
<f:ajax execute="@form" render="@form" />
</h:commandLink>
</h:column>
</h:dataTable>
<h:commandButton value="add" action="#{user.addObject}">
<f:ajax execute="@form" render="@form" />
</h:commandButton>
</h:panelGroup>
item.java
@ManagedBean
@ViewScoped
public class Item implements Serializable{
public void addObject(){
Pair<String,String> tempPair = new Pair<String,String>("","");
items.add(tempPair);
return;
}
public void removeObject(Pair<String,String> i){
items.remove(i);
return;
}
}
更新 1
代わりに jsf 2.1 を使用して、viewAction を preRenderView に変更してみましたが、コードは正常に動作します。