I've the below data table:
<h:dataTable var="row" value="#{myBean.listOfStrings}">
<h:column>
<h:inputText value="#{row}" />
</h:column>
</h:dataTable>
Which is tied to a List<String>
:
private List<String> listOfStrings = new ArrayList<String>();
public List<String> getListOfStrings() {
return listOfStrings;
}
public void setListOfStrings(List<String> listOfStrings) {
this.listOfStrings = listOfStrings;
}
When I enter a value in the field and save the form it is not passing the value to the field in the list, it is setting null
, what am I doing wrong here?
The
String
class is immutable. It doesn't have a setter for the instance value. The getter is in this construct basically theObject#toString()
method as implicitly called by EL, which coincidentally returns the string value itself.You need to set the changed value as a new list item instead. You can do this via the brace notation on the list whereby you pass the list index:
#{myBean.listOfStrings[index]}
.So, this should do, making use of
UIData#getRowIndex()
as list index:(note: the value expression of
binding
is as-is! don't bind it to a bean property)See also: