【问题标题】:ui:repeat var attribute not working as expectedui:repeat var 属性未按预期工作
【发布时间】:2011-08-28 07:31:40
【问题描述】:

由于 problem with @ViewScoped,我必须在我的 facelet 中使用 ui:repeat 而不是 c:foreach。但是我遇到了这个问题,我想知道是否有人可以提出解决方法。

<ui:repeat value="#{someBean.idCodes}"
           var="led">
           <h:outputText id="mailbox-#{led}" 
               value="#{someBean.getSomeValue(led)}" />
</ui:repeat>

第一个问题是 #{led} 引用是 id 属性没有得到评估。所有生成的 id 属性都只是值“mailbox-”。我需要使用 document.getElementById() 找到特定的元素实例,所以我需要生成的 id 属性。

我看不到解决方法的另一个问题是,如果我将 ui:repeat 元素包装在 h:panelGrid 元素中,我最终会得到一个包含一个单元格的表格,而不是每个单元格idCodes 集合的成员。

使用 c:foreach 时,这些问题都不存在,但使用该标签会导致其他问题。有什么建议吗?

【问题讨论】:

    标签: jsf-2 mojarra


    【解决方案1】:

    注意javadocs 中id 属性的类型是String,而不是ValueExpression。这就是你的 ${led} 没有被评估的原因。您可以尝试将每个元素包装在 div 或 span 中,并将该元素的 id 设置为基于 ${led} 的表达式。

    【讨论】:

    • Debbil 在详细信息中。你的建议奏效了。有趣的是为什么它可以与 c:foreach 一起使用。我还没有研究实现,但它表明有一个不同的传递来处理遵循不同规则的 JSTL 标记。
    • 这篇博文ilikespam.com/jsf/c%3Aforeach-vs-ui%3Arepeat-in-facelets 解释了jstl 标记与原生JSF 标记的处理方式有何不同,以及为什么将两者混合是一个坏主意。这是一本优秀的读物,每个 JSF 程序员都应该阅读。
    猜你喜欢
    • 1970-01-01
    • 2020-04-26
    • 2021-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-05
    • 1970-01-01
    • 2014-02-23
    相关资源
    最近更新 更多