我有以下数据表:
<h:dataTable var="row" value="#{myBean.listOfStrings}">
<h:column>
<h:inputText value="#{row}" />
</h:column>
</h:dataTable>
与List<String>
:
private List<String> listOfStrings = new ArrayList<String>();
public List<String> getListOfStrings() {
return listOfStrings;
}
public void setListOfStrings(List<String> listOfStrings) {
this.listOfStrings = listOfStrings;
}
当我在字段中输入一个值并保存表单时,它没有将值传递给列表中的字段,而是设置null
,我在这里做错了什么?
答案 0 :(得分:5)
String
类是不可变的。它没有实例值的setter。 getter在这个构造中基本上是由EL隐式调用的Object#toString()
方法,它巧合地返回字符串值本身。
您需要将更改后的值设置为新的列表项。您可以通过列表上的括号表示法执行此操作,从而传递列表索引:#{myBean.listOfStrings[index]}
。
所以,这应该做,使用UIData#getRowIndex()
作为列表索引:
<h:dataTable binding="#{table}" value="#{myBean.listOfStrings}" var="row">
<h:column>
<h:inputText value="#{myBean.listOfStrings[table.rowIndex]}" />
</h:column>
</h:dataTable>
(注意:binding
的值表达式是原样的!不要将它绑定到bean属性)