如果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