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

时间:2015-02-19 12:44:44

标签: jsf enums el

我有以下JSF代码片段:

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

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

支持bean具有以下功能:

public List<Template> getTemplates(TemplateType templateType)

TemplateTypeenum

public enum TemplateType {
    ANSWER,
    TEXTBLOCK;
}

我想到的唯一方法是创建另一个函数,它返回enum - 类型的实际选项,但这似乎有些无意义。我还尝试将enum - 类设为Scope,但我无法访问它。

2 个答案:

答案 0 :(得分:4)

您可以将枚举值作为字符串传递。 EL已经为此建立了强制。

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

每当您想要在视图中包含所有枚举值时,<o:importConstants>通常都很方便,例如作为下拉项目如下:

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

答案 1 :(得分:3)

如果你想使用这样的枚举(TemplateType.TEXTBLOCK),你应该试试o:importConstantsomnifaces}

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

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

然后像这样使用它

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

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

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