如果editableBaseSetList
是一个int [],然后baseNumber
是一个int。您现在将输入文本组件绑定到此int。
但是这种绑定不是双向的。输入元素只能看到你绑定的元素,而不是它所源自的集合。因此它不知道如何更新这个集合。
因此您需要绑定到可更新的内容。如果您的列表例如包含有getter和setter为内部整数的的IntHolder(说getInt()和SETINT()),并且该列表将ArrayList中,你可以使用:
<ui:repeat value="#{drawsetController.selected.editableBaseSetList}" var="baseNumber">
<h:inputText value="#{baseNumber.int}"/>
</ui:repeat>
回传后,JSF将使用提供的值调用列表中每个IntHolder上的setInt()方法。
对于已经存在整数或其他不可变类型的集合,将其转换为上述集合可能有点麻烦。然而,还有另一种解决方案。在那里,您不使用ui:repeat
的var
属性,而是使用其索引。然后您给h:inputText
绑定到由此索引var索引的集合。
E.g.
假设你有以下豆:
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
@ManagedBean
@ViewScoped
public class RepeatBean {
List<Integer> list;
public List<Integer> getList() {
return list;
}
@PostConstruct
public void initList() {
list = new ArrayList<Integer>();
list.add(10);
list.add(20);
list.add(30);
}
public String save() {
// list now contains the values provided by the user.
return "";
}
}
使用以下的facelet:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
>
<h:body>
<h:form>
<ui:repeat value="#{repeatBean.list}" varStatus="status">
<h:inputText value="#{repeatBean.list[status.index]}" />
</ui:repeat>
<h:commandButton value="Save" action="#{repeatBean.save}" />
</h:form>
</h:body>
</html>
这将首先在屏幕上显示10 20 30。当您更改号码并点击保存时,您可以通过例如列表实例变量包含更新的数字的断点。
事实上,我刚刚发现我自己。所以实际上,我现在使用baseNumber.storedInteger和setter是正确的调用。现在我必须从对象数组构建我的原始int数组。 – aciobanu
我的问题是事实上,我的托管bean proprety它是一个数组,并且我想为数组中的每个成员输入文本并将它们保存到数据库中。这是我还没有实现的。 – aciobanu
你有没有尝试过几个'inputText'指向'value'到同一个'#{managedBean.property}'?你知道你可以使用“选择多个列表框”吗?如果它解决了你的问题,当然... – bluefoot