0

我有一个添加和删除对象的动态数据表。当我不使用 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,我的代码工作正常。

4

2 回答 2

0

这是 jsf 2.2.0 中的一个错误。我用 javax-faces-2.2.1.jar 替换了 javax-faces-2.2.0.jar,问题就消失了。

或者,另一种解决方案是将<f:ajax>上述内容替换为:

<f:ajax execute="@form" render=":form:list">

显然,只要不呈现整个表单,ajax 调用在 jsf 2.2.0 中就可以正常工作。

于 2013-07-10T14:37:36.973 回答
0

我认为 ajax 缺少更新属性。尝试这个:

<f:ajax execute="@form" render="@form" update="@form"/>
于 2013-07-10T11:31:57.680 回答