for string list jsf jsf-2 uirepeat

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.