【问题标题】:Iterate over enum values imported by <o:importConstants>遍历由 <o:importConstants> 导入的枚举值
【发布时间】:2017-03-22 10:45:24
【问题描述】:

是否可以在 ui:repeatc:forEach 中迭代 ENUM? 我正在使用 Omnifaces 2.5 的o:importConstants

示例代码:

<o:importConstants type="my.package.MyEnum"></o:importConstants>
<c:forEach var="icon" items="#{MyEnum}">
    #{icon.toString()}
</c:forEach>

但它来了:

com.sun.faces.facelets.tag.jstl.core.MappedValueExpression$Entry@565a5787

com.sun.faces.facelets.tag.jstl.core.MappedValueExpression$Entry@6c01f0ce

com.sun.faces.facelets.tag.jstl.core.MappedValueExpression$Entry@2cd6ac37

com.sun.faces.facelets.tag.jstl.core.MappedValueExpression$Entry@7b6d8d37

com.sun.faces.facelets.tag.jstl.core.MappedValueExpression$Entry@7f8f1bb2

【问题讨论】:

    标签: jsf enums omnifaces


    【解决方案1】:

    &lt;o:importConstants&gt; 将枚举值转换为Map&lt;String, E&gt;,其中映射键是枚举名称的字符串表示,映射值是实际的枚举实例本身。您现在实际上正在尝试的是将每个 Map.Entry 实例打印为字符串。您实际上应该使用它的 getKey() 和/或 getValue() 方法。

    目前仅在&lt;c:forEach&gt; 中支持直接迭代Map。另见How to use jstl foreach directly over the values of a map?

    <c:forEach items="#{MyEnum}" var="entry">
        Map key: #{entry.key} <br/>
        Map value: #{entry.value} <br/>
    </c:forEach>
    

    &lt;ui:repeat&gt;(和&lt;h:dataTable&gt;)仅从 JSF 2.3 开始支持它。在此之前,您最好改为迭代 Map#values()

    <ui:repeat value="#{MyEnum.values()}" var="value">
        Map value: #{value} <br/>
    </ui:repeat>
    

    【讨论】:

    • 谢谢!它解释了很多。
    猜你喜欢
    • 2010-12-12
    • 1970-01-01
    • 1970-01-01
    • 2011-09-01
    • 2015-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-11
    相关资源
    最近更新 更多