我有一个带有以下签名的通用类:
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}" />
<o:importConstants>
很有用。 - BalusCnew EnumListBean<Item.Rarity>.getEnumList()
没有办法返回除new EnumListBean<SomethingElse>.getEnumList()
之外的任何内容,除非传递一个类型标记。您可以做的是伪造一个索引属性,并且拥有一个可由Class
索引的 bean,该 bean 返回其值列表,但我不确定您是否可以在 EL 中使用类字面量。 - millimoose<o:importConstants>
导入的枚举是否可以与<f:selectItems>
一起用作列表? - Sebastian Hoffmann