首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >h:selectOneMenu in循环

h:selectOneMenu in循环
EN

Stack Overflow用户
提问于 2012-06-10 20:55:59
回答 1查看 1.8K关注 0票数 1

我希望记住c:forEach循环中多个h:selectOneMenu组件的值。现在只记住h:selectOneMenu的最后一个值。我不知道会出现多少个h:selectOneMenu。

代码语言:javascript
复制
<h:panelGrid 
                    id="wynik"
                    columns="2"
                    border="0" 
                    cellpadding="2" 
                    cellspacing="0" 
                    rowClasses="jsfcrud_odd_row,jsfcrud_even_row" 
                    rules="all" 
                    style="border:solid 1px">
                    <h:outputText id="ns" value="Numer stanowiska"/>
                    <h:outputText id="kontr" value="Kontroler"/>
                    <c:forEach 
                        var="stanowisko"
                        begin="1" 
                        end="#{stojakiController.selected.iloscstanowisk}"
                        step="1">
                        <h:column>
                            <h:outputText value="#{stanowisko}"/>
                        </h:column>
                        <h:column>
                            <h:selectOneMenu 
                                id="kontroler_#{stanowisko}" 
                                value="#{wyposazenieStojakaController.selected.kontroler}" 
                                title="#{bundle.CreateWyposazenieStojakaTitle_kontroler}" 
                                required="true" 
                                requiredMessage="#{bundle.CreateWyposazenieStojakaRequiredMessage_kontroler}">
                                <f:selectItems value="#{kontroleryController.itemsAvailableSelectOne}"/>
                            </h:selectOneMenu>
                        </h:column>
                    </c:forEach>
                </h:panelGrid>
EN

回答 1

Stack Overflow用户

发布于 2012-06-11 00:22:04

这不是根据动态大小的集合呈现表的正确方法。将每一行的值绑定到one和相同的 backing属性。每当每行需要设置值时,该属性都会被重写。这就是为什么您最后只能得到最后一行的值。

您应该使用<h:dataTable>,而不是带有<c:forEach><h:panelGrid>。您应该准备一组具体的模型对象,而不仅仅是对象的大小。例如,

代码语言:javascript
复制
public class Item {

    private String value;

    // ...
}

然后,在后台bean的(Post)构造函数中,您应该准备尽可能多的支持bean。

代码语言:javascript
复制
public class Bean {

    private List<Item> items;

    @PostConstruct
    public void init() {
        items = new ArrayList<Item>();

        for (int i = 0; i < yourDesiredAmountOfItems; i++) {
            items.add(new Item());
        }
    }

    // ...
}

下面是一个基本的入门示例,您应该如何使用它:

代码语言:javascript
复制
<h:dataTable value="#{bean.items}" var="item">
    <h:column>
        <h:selectOneMenu value="#{item.value}">
            <f:selectItems value="#{bean.availableValues}" />
        </h:selectOneMenu>
    </h:column>
</h:dataTable>

提交表单时,JSF将在与该行关联的每个单独的item对象中正确地设置每一行的值。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10972284

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档