我有以下数据表:
<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
,我在这里做错了什么?
最佳答案
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
的值表达式是原样的!不要将它绑定(bind)到 bean 属性)
另见:
关于string - 使用 <h :dataTable><h:inputText> on a List<String> doesn't update model values,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21236170/