【问题标题】:Dynamically setting value of a h:selectOneMenu using c:forEach使用 c:forEach 动态设置 h:selectOneMenu 的值
【发布时间】:2016-03-28 13:09:30
【问题描述】:

我正在开展一个项目,该项目需要我显示并能够选择和存储产品标签。标签以树状结构提供。我不能假设标签树的最大深度。

我想显示按级别拆分的标签,使用 c:forEach - p:selectManyCheckbox - f:selectItems,并使用 p:ajax 组件处理选择。

我使用以下类型在 Tree 对象中存储可能的值和选择:

HashMap<Long, ArrayList<Tag>> tree;
HashMap<Long, Object[]> selected;

Hashmap 键等于“标签级别”。

为了显示值,我使用以下代码进行测试:

<p:panelGrid id="tagDisplay" columns="2">
    <c:forEach begin="1" end="5" var="idx">
        <p:outputLabel value="#{idx}"></p:outputLabel>
        <p:selectManyCheckbox value="#{product.tags.selected[1]}">
            <f:selectItems value="#{product.tags.tree[1]}" var="tag" itemLabel="#{tag.name}" itemValue="#{tag.id}" />
            <p:ajax listener="#{product.selectorListener}" update="tagDisplay" />
        </p:selectManyCheckbox>
    </c:forEach>
</p:panelGrid>

代码似乎运行良好,但显示了五次。

现在我一直在尝试将 Hashmap 动态绑定到选择器。当我用“idx”替换“1”时,我没有得到任何结果。

我尝试将 ui-repeat 与虚拟表一起使用,但后来我丢失了 panelgrid 结构。

任何帮助将不胜感激!

我的环境 - Websphere 8.5、JSF 2.2、Primefaces 5.2

【问题讨论】:

    标签: jsf jsf-2 primefaces jstl


    【解决方案1】:

    &lt;c:forEach begin end&gt; 仅用于静态迭代,不用于动态迭代。

    您最好在 &lt;c:forEach items&gt; 中迭代 #{product.tags.tree} 本身。 Map 上的每次迭代都会返回 Map.Entry,而 getKey()getValue() 方法又会返回。

    <p:panelGrid ...>
        <c:forEach items="#{product.tags.tree}" var="entry" varStatus="loop">
            <p:outputLabel value="#{loop.index}"></p:outputLabel>
            <p:selectManyCheckbox value="#{product.tags.selected[entry.key]}">
                <f:selectItems value="#{entry.value}" ... />
                ...
            </p:selectManyCheckbox>
        </c:forEach>
    </p:panelGrid>
    

    也就是说,它真的必须是HashMap吗?你不想要一个固定的顺序LinkedHashMap吗?

    【讨论】:

    • 嗯,迭代的想法似乎很可靠,谢谢!所以我应该使用 LinkedHashMap 来保留迭代顺序。我说得对吗?
    • 保留插入顺序。否则,排序基本上取决于 JVM make/version。
    • Oj,我会检查一下,感谢您一如既往的支持:D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-26
    • 2016-07-13
    • 2012-06-30
    • 2010-10-01
    相关资源
    最近更新 更多