4

我有一个豆子List<T>

@Named
@ViewScoped
public class Bean {

    private List<Item> items;
    private String value;

    @Inject
    private ItemService itemService;

    @PostConstruct
    public void init() {
        items = itemService.list();
    }

    public void submit() {
        System.out.println("Submitted value: " + value);
    }

    public List<Item> getItems() {
        return items;
    }
}

我想编辑value每个项目的属性:

<h:form>
    <ui:repeat value="#{bean.items}" var="item">
        <h:inputText value="#{bean.value}" />
    </ui:repeat>
    <h:commandButton action="#{bean.submit}" />
</h:form>

使用此代码,value不包含所有提交的值,仅包含最新提交的值。我也试过<c:forEach>and <h:dataTable>,但没有任何区别。

我应该怎么做才能收集所有提交的值?

4

1 回答 1

3

您的问题是因为您基本上将所有提交的值收集到一个相同的 bean 属性中。您需要将value属性移动到 bean 后面var="item"

<h:form>
    <ui:repeat value="#{bean.items}" var="item">
        <h:inputText value="#{item.value}" /> <!-- instead of #{bean.value} -->
    </ui:repeat>
    <h:commandButton action="#{bean.submit}" />
</h:form>

在 bean 操作方法中,只需迭代items即可通过item.getValue().

public void submit() {
    for (Item item : items) {
        System.out.println("Submitted value: " + item.getValue());
    }
}
于 2011-02-09T22:55:48.927 回答