Использование <ui: repeat> <h: inputText> в списке <String> не обновляет значения модели

Вот сценарий (упрощенный):

Есть боб (назовите этоmrBean) с членом и соответствующими получателями / установщиками:

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)) никогда не называется.

Есть идеи почему?

Некоторая информация - Я использую MyFaces JSF 2.0 на Tomcat 6.

Ответы на вопрос(1)

Решение Вопроса

String class является неизменным и не имеет установщика для значения. Добытчик в основном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).

 18 мар. 2015 г., 14:43
Итак, loop.index здесь возвращает индекс текущего элемента списка?
 Ben28 мая 2012 г., 13:53
Спасибо! Я подумал, что проблема была в том, что значения неизменны, но я не знал, сможет ли JSF как-то преодолеть это. Это действительно объясняет это так спасибо.
 23 июл. 2018 г., 15:22
Да, благодаряvarStatus.

Ваш ответ на вопрос