如何访问EL中的枚举属性



给定以下enum

public enum Constants
{
    PAGE_LINKS(10);
    //Other constants as and when required.
    private final int value;
    private Constants(int value){
        this.value = value;
    }
    public int getValue(){
        value;
    }    
}

这个enum被放在一个应用程序范围的bean下,比如

@ManagedBean
@ApplicationScoped
public final class ConstantsBean
{
    private Constants constants;
    public ConstantsBean() {}
    public Constants getConstants() {
        return constants;
    }
}

如何访问EL中PAGE_LINKS的值?

<p:dataGrid pageLinks="#{}".../>

#{}中应该写些什么?有可能吗?


编辑:

按照以下方式修改bean,

@ManagedBean
@ApplicationScoped
public final class ConstantsBean
{
    public ConstantsBean() {}
    public int getValue(Constants constants) {
        return constants.getValue();
    }
}

然后像这样在EL中访问,

<p:dataGrid pageLinks="#{constantsBean.getValue('PAGE_LINKS')}".../>

不知怎么的有效,但我不相信这种丑陋的方式。

正如的Sazzadur所评论的那样

#{constantsBean.constants.value}

应该起作用。枚举的value属性有一个合适的公共getter。但是,您还应该确保将托管bean的constants属性设置为所需的枚举值。也就是说,您在迄今为止发布的代码片段中没有这样做,因此它仍然是null。当(基本)属性为null时,EL设计不打印任何内容。

以下是设置方法:

@ManagedBean
@ApplicationScoped
public final class ConstantsBean {
    private Constants constants = Constants.PAGE_LINKS;
    public Constants getConstants() {
        return constants;
    }
}

但是,我会将属性(和getter)重命名为pageLinks,以获得更好的自文档性。

#{constantsBean.pageLinks.value}

另一种选择是使用OmniFaces <o:importConstants>,基于您的问题历史记录,您已经熟悉OmniFaces,并且可能已经在当前项目中使用了它。

<o:importConstants type="com.example.Constants" />
...
#{Constants.PAGE_LINKS.value}

这样,您就不需要在应用程序范围的bean中包装该内容。

由于Primefaces 6.0,您也可以使用PrimefacesimportEnum(在此之前,导入是在"PrimefacesExtensions"中)。

https://www.primefaces.org/showcase/ui/misc/importEnum.xhtml

相关内容

  • 没有找到相关文章

最新更新