鉴于以下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的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中。
从Primefaces 6.0开始,你也可以使用PrimeFaces importEnum
(在导入之前是“Primefaces Extensions”)。
https://www.primefaces.org/showcase/ui/misc/importEnum.xhtml