Jsf 如何访问EL中的枚举属性?
给定以下Jsf 如何访问EL中的枚举属性?,jsf,enums,el,jsf-2.2,Jsf,Enums,El,Jsf 2.2,给定以下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
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中访问页面链接的值
<p:dataGrid pageLinks="#{}".../>
然后像这样进入EL
<p:dataGrid pageLinks="#{constantsBean.getValue('PAGE_LINKS')}".../>
不知何故,这是可行的,但我不相信这种丑陋的方式。正如萨扎杜尔所说
#{constantsBean.constants.value}
应该有用。枚举的值
属性具有适当的公共getter。但是,您还应该确保将托管bean的常量
属性设置为所需的枚举值。您在目前发布的代码片段中没有这样做,因此它仍然是null
。当(base)属性为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,并且可能已经在当前项目中使用了OmniFaces
<o:importConstants type="com.example.Constants" />
...
#{Constants.PAGE_LINKS.value}
...
#{Constants.PAGE_LINKS.value}
这样,您就不需要将东西包装到应用程序范围的bean中。由于Primefaces 6.0,您也可以使用PrimefacesimportEnum
(导入之前是在“Primefaces Extensions”中)
{constantsBean.constants.value}
应该适合您。如果不行,@Sazzadurahaman
找不到给定的类型。我按照答案,将常量
类(enum
实际上)从/src/java/util/Constants.java
移动到/WEB-INF/classes/util/Constants.java
。IDE显示“不正确的包”。此标记(位于
内部),
抛出java.lang.IllegalArgumentException:在类路径中找不到类型“util.Constants”。
我缺少什么明显的内容?您使用的是什么IDE?它应该从/src
自动编译.java
文件,并将创建的.class
文件放入/WEB-INF/classes
中。您不应该需要在/WEB-INF/classes
中手动摆弄。也许您不小心关闭了自动生成?它是NetBeans IDE 8.0。我所做的是:从服务器上取消部署应用程序(GlassFish 4.0),重新启动服务器,进行清理和构建,然后从头开始重新部署应用程序,但之后仍然存在相同的异常。所有Java包都存储在/src/Java
下。Constants
类也位于/src/java/util/Constants.java
中,它位于build文件夹-/build/web/web-INF/classes/util/Constants.class
中。这是应用程序部署后常量.class
(一个enum
)的完整路径-E:\Project\JavaEE\Project\Project-WAR\build\web\web-INF\classes\util\Constants.class
排除其中一个和另一个,实际答案对您有用吗?因为上面的示例中没有提到:xmlns:pe=”http://primefaces.org/ui/extensions"
是合适的名称空间,您需要将扩展添加到类路径:不幸的是,使用JBoss工具在Eclipse Kepler中完成代码不起作用,我发现没有Eclipse插件支持它。但是没有什么是完美的:-)对我来说,它仍然比编写@Name enum Foo{xxx,bar;公共静态字符串getXxx(){return xxx.Name()}…}
getters并向客户机公开enum(使用它ala{Foo.xxx}
)要好。自从importEnum从6.1开始被合并到PF中以来,这个链接就死了
<o:importConstants type="com.example.Constants" />
...
#{Constants.PAGE_LINKS.value}