我有一个添加和删除对象的动态数据表。当我不使用 ajax 时,这很好用。但是,当我使用 ajax 时,就会出现问题。最初添加值很好。但是,当我开始删除对象时,当我删除最后一个对象时,项目列表也会被删除并变为空。我正在使用带有 primefaces 的 jsf 2.2。我不确定是什么导致了这个问题。我的代码如下。
项目.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>
项目.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,我的代码工作正常。