迭代 <o:importConstants> 导入的枚举值
Iterate over enum values imported by <o:importConstants>
是否可以在 ui:repeat
或 c: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
<o:importConstants>
将枚举值转换为 Map<String, E>
,其中映射键是枚举名称的字符串表示,映射值是实际的枚举实例本身。您现在实质上正在尝试的是打印每个 Map.Entry
instance as string. You should actually be using its getKey()
and/or getValue()
方法。
目前仅 <c:forEach>
支持直接迭代 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>
<ui:repeat>
(和<h:dataTable>
)仅从 JSF 2.3 开始支持它。在那之前,您最好迭代 Map#values()
。
<ui:repeat value="#{MyEnum.values()}" var="value">
Map value: #{value} <br/>
</ui:repeat>
是否可以在 ui:repeat
或 c: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
<o:importConstants>
将枚举值转换为 Map<String, E>
,其中映射键是枚举名称的字符串表示,映射值是实际的枚举实例本身。您现在实质上正在尝试的是打印每个 Map.Entry
instance as string. You should actually be using its getKey()
and/or getValue()
方法。
目前仅 <c:forEach>
支持直接迭代 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>
<ui:repeat>
(和<h:dataTable>
)仅从 JSF 2.3 开始支持它。在那之前,您最好迭代 Map#values()
。
<ui:repeat value="#{MyEnum.values()}" var="value">
Map value: #{value} <br/>
</ui:repeat>