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