Если editableBaseSetList
- это int [], то baseNumber
- это int. Теперь вы связываете компонент ввода текста с этим int.
Однако эта привязка не является двунаправленной. Элемент input может видеть только элемент, к которому вы привязываете, а не коллекцию, из которой он происходит. Таким образом, он не знает, как обновить эту коллекцию.
Таким образом, вам нужно привязать что-то, что можно обновить. Например, если ваш список содержит IntHolder с getter и setter для внутреннего целого числа (скажем, getInt () и setInt ()), и список будет ArrayList, который вы используете:
<ui:repeat value="#{drawsetController.selected.editableBaseSetList}" var="baseNumber">
<h:inputText value="#{baseNumber.int}"/>
</ui:repeat>
После обратной передачи JSF вызовет метод setInt () для каждого IntHolder в списке с предоставленными значениями.
Для коллекции, которая уже содержит целые числа или другие неизменяемые типы, преобразование ее в такую коллекцию, упомянутую выше, может быть затруднительным. Однако есть и другое решение. Там вы не используете var
атрибут ui:repeat
, но используете его индекс. Затем вы присваиваете h:inputText
привязку к коллекции, проиндексированной этим индексом var.
1017 * Е.Г. *
Предположим, у вас есть следующий компонент:
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. Когда вы измените числа и нажмете «Сохранить», вы можете проверить, например, с помощью точка останова, что переменная экземпляра списка содержит обновленные числа.