string - 使用 <h :dataTable><h:inputText> on a List<String> doesn't update model values

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

最佳答案

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/

相关文章:

java - 从一串数字中获取一个 int 数组

javascript - 在 JSF panelgrid 上使用 jQuery onmousedown 和 onmouseup

c++ - 有没有比 getchar() (C/C++) 更快地读取字符串的方法?

java - 键盘输入java

java - 将字符串解析为 double[]

java - 递归地在空格中添加星号

jsf - 如何限制RichFaces 4丰富:fileUpload to single file upload?

c - 将带有空格的字符串读取到列表变量中

java - 使用 string.split java 将一个字符串分成两个

jsf - Spring Boot + Primefaces 默认 URL 重定向