给定以下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