我有通用类与此签名:如何在f:selectItems中为枚举创建和使用泛型bean?
public abstract class EnumListBean<E extends Enum<E>> {
public List<E> getEnumList() {
//implementation details
}
}
目前我有才能访问enumList属性的具体泛型参数来定义一个空的子类:
@ManagedBean
@ApplicationScoped
public class ItemRarityBean extends EnumListBean<Item.Rarity>{
}
这使得它能够访问属性例如:
<f:selectItems value="#{itemRarityBean.enumList}" var="rarity"
itemLabel="#{rarity.readableName}" itemValue="#{rarity}" />
我想知道是否真的必须声明一个派生bean,但无法访问吨他通用类直接作为bean:
<f:selectItems value="#{enumListBean<Item.Rarity>.enumList}" var="rarity"
itemLabel="#{rarity.readableName}" itemValue="#{rarity}" />
你会发现[OmniFaces'<○:importConstants>'](https://showcase-omnifaces.rhcloud.com/showcase/taghandlers/importConstants.xhtml)是有用的。 – BalusC 2012-07-17 19:03:52
在您的具体情况下,即使EL可以访问具体的参数化类型,它也可能不会有用。由于类型擦除,'new EnumListBean .getEnumList()'不返回除'new EnumListBean .getEnumList()'以外的任何内容,而不传递类型标记。你可以做的是伪造一个索引属性,并且有一个可以通过'Class'索引的bean,该类返回它的值列表,但我不确定是否可以在EL中使用类文字。 –
millimoose
2012-07-17 19:07:30
@BalusC哇,几乎是我想要达到的确切的东西。一个''输入的枚举是否可以和''一起用作列表? –
Paranaix
2012-07-17 19:12:13