迭代<o:importconstants>导入的枚举值

时间:2017-03-22 10:45:25

标签: jsf enums omnifaces

是否可以在FullArgSpec(args=['a', 'b'], varargs=None, varkw=None, defaults=(10,), kwonlyargs=['c', 'd'], kwonlydefaults={'c': 20, 'd': 30}, annotations={}) ui:repeat中迭代ENUM? 我正在使用Omnifaces 2.5的c:forEach

示例代码:

o:importConstants

但它来了:

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

1 个答案:

答案 0 :(得分:2)

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

直接对Map进行迭代,截至目前仅<c:forEach>支持。另请参阅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>