如何使用表达式语言传递枚举参数?

How to pass an enum parameter with expression language?

我有以下 JSF 代码片段:

<p:selectManyMenu>
    <f:selectItems value="#{templateBean.getTemplates(TemplateType.TEXTBLOCK)}"
</p:selectManyMenu>

如何将 enum 参数传递给 getTemplates() -功能?

backing bean有这个功能:

public List<Template> getTemplates(TemplateType templateType)

TemplateType 是一个 enum:

public enum TemplateType {
    ANSWER,
    TEXTBLOCK;
}

我想到的唯一方法是创建另一个函数,让 returns 我成为那个 enum 类型的实际选项,但这似乎有点毫无意义。我也试过给enum-Class一个Scope,但是访问不了

如果你想像那样使用枚举 (TemplateType.TEXTBLOCK) 你应该尝试 o:importConstants (by omnifaces)

将以下内容放在您的页面上

<o:importConstants type="com.my.package.name.TemplateType" />

那就这样用吧

<p:selectManyMenu>
    <f:selectItems value="#{templateBean.getTemplates(TemplateType.TEXTBLOCK)}"
</p:selectManyMenu>

当然你总是可以像这样使用枚举纯文本:

value="#{templateBean.getTemplates('TEXTBLOCK')}"

您可以将枚举值作为字符串传递。 EL 内置了强制转换。

<f:selectItems value="#{templateBean.getTemplates('TEXTBLOCK')}" />

<o:importConstants> 通常只有在你想在视图中包含所有枚举值时才有用,例如作为下拉项如下:

<f:selectItems value="#{TemplateType}" />