9

シナリオは次のとおりです(簡略化):

mrBeanメンバーと適切なゲッター/セッターを持つBean ( と呼びます) があります。

private List<String> rootContext;

public void addContextItem() {
    rootContext.add("");
}

JSF コード:

<h:form id="a_form">
            <ui:repeat value="#{mrBean.stringList}" var="stringItem">
                    <h:inputText value="#{stringItem}" />
            </ui:repeat>
            <h:commandButton value="Add" action="#{mrBean.addContextItem}">
                <f:ajax render="@form" execute="@form"></f:ajax>
            </h:commandButton>
</h:form>

問題は、[追加] ボタンをクリックしたときに<h:inputText/>、文字列を表すに入力された値stringListが実行されないことです。

実際には、mrBean.stringListセッター ( setStringList(List<String> stringList)) が呼び出されることはありません。

理由はありますか?

いくつかの情報 - Tomcat 6 で MyFaces JSF 2.0 を使用しています。

4

1 に答える 1

25

クラスは不変であり、値のStringセッターがありません。ゲッターは基本的にObject#toString()メソッドです。

代わりに、値を直接取得/設定する必要がありますList。で利用可能なリスト インデックスでそれを行うことができます<ui:repeat varStatus>

<ui:repeat value="#{mrBean.stringList}" varStatus="loop">
    <h:inputText value="#{mrBean.stringList[loop.index]}" />
</ui:repeat>

どちらにもセッターは必要ありませんstringList。EL は で項目を取得し、 で項目List#get(index)を設定しますList#add(index,item)

于 2012-05-28T11:39:52.020 に答える