0

オブジェクトを追加および削除する動的な 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 に変更してみましたが、コードは正常に動作します。

4

2 に答える 2

0

これは jsf 2.2.0 のバグです。javax-faces-2.2.0.jar を javax-faces-2.2.1.jar に置き換えたところ、問題はなくなりました。

または、別の解決策は、<f:ajax>上記を次のものに置き換えることです。

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

どうやら、フォーム全体がレンダリングされない限り、ajax 呼び出しは jsf 2.2.0 で正常に機能します。

于 2013-07-10T14:37:36.973 に答える