string - for - ui repeat jsf 2
Usar<ui: repeat><h: inputText> en una List<String> no actualiza los valores del modelo (1)
La clase String es inmutable y no tiene un setter para el valor. El getter es básicamente el método Object#toString() .
En su lugar, debe obtener / establecer el valor directamente en la List . Puede hacerlo mediante el índice de lista que está disponible por <ui:repeat varStatus> .
<ui:repeat value="#{mrBean.stringList}" varStatus="loop">
<h:inputText value="#{mrBean.stringList[loop.index]}" />
</ui:repeat>
No necesitas un setter para stringList tampoco. EL obtendrá el artículo por List#get(index) y establecerá el artículo por List#add(index,item) .
Aquí está el escenario (simplificado):
Hay un bean (llámalo mrBean ) con un miembro y los getters / setters apropiados:
private List<String> rootContext;
public void addContextItem() {
rootContext.add("");
}
El código 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>
El problema es que al hacer clic en el botón "Agregar", los valores que se ingresaron en <h:inputText/> que representan las cadenas en la lista de stringList no se ejecutan.
En realidad, el setter mrBean.stringList ( setStringList(List<String> stringList) ) nunca se llama.
¿Alguna idea de por qué?
Algo de información: estoy usando MyFaces JSF 2.0 en Tomcat 6.