鉴于以下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')}".../>
某种程度上有效,但我不相信这种丑陋的方式。
答案 0 :(得分:17)
这是Sazzadur的commented,
#{constantsBean.constants.value}
应该有效。你的枚举对value
属性有适当的公共吸气剂。但是,您还应确保将托管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中。
答案 1 :(得分:7)
从Primefaces 6.0开始,你也可以使用PrimeFaces importEnum
(在导入之前是“Primefaces Extensions”)。
https://www.primefaces.org/showcase/ui/misc/importEnum.xhtml