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>とも試し<h:dataTable>ましたが、違いはありませんでした。

送信されたすべての値を収集するにはどうすればよいですか?

4

1 に答える 1

3

基本的に、送信されたすべての値を1つの同じ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>

itemsBeanアクションメソッドでは、を介して送信されたすべての値を取得するために、単純に繰り返し処理しますitem.getValue()

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