在List <string>上使用<h:datatable> <h:inputtext>不会更新模型值</string> </h:inputtext> </h:datatable>

时间:2014-01-20 14:11:00

标签: string jsf input datatable

我有以下数据表:

<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,我在这里做错了什么?

1 个答案:

答案 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属性)

另见: