Tin*_*iny 13 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;
}
}
Run Code Online (Sandbox Code Playgroud)
这enum被置于应用程序范围的bean下,如此,
@ManagedBean
@ApplicationScoped
public final class ConstantsBean
{
private Constants constants;
public ConstantsBean() {}
public Constants getConstants() {
return constants;
}
}
Run Code Online (Sandbox Code Playgroud)
如何访问PAGE_LINKSEL中的值?
<p:dataGrid pageLinks="#{}".../>
Run Code Online (Sandbox Code Playgroud)
应该写#{}什么?可能吗?
编辑:
以下列方式修改bean,
@ManagedBean
@ApplicationScoped
public final class ConstantsBean
{
public ConstantsBean() {}
public int getValue(Constants constants) {
return constants.getValue();
}
}
Run Code Online (Sandbox Code Playgroud)
然后像这样访问EL,
<p:dataGrid pageLinks="#{constantsBean.getValue('PAGE_LINKS')}".../>
Run Code Online (Sandbox Code Playgroud)
不知何故有效,但我不相信这种丑陋的方式.
Bal*_*usC 17
正如Sazzadur 评论的那样,
#{constantsBean.constants.value}
Run Code Online (Sandbox Code Playgroud)
应该管用.你的枚举有适当的公共吸气剂value.但是,您还应确保constants将托管bean 的属性设置为所需的枚举值.你在目前为止发布的代码片段中没有这样做,因此它仍然存在null.EL(设计)在(基础)属性时不会打印任何内容null.
以下是您可以设置它的方法:
@ManagedBean
@ApplicationScoped
public final class ConstantsBean {
private Constants constants = Constants.PAGE_LINKS;
public Constants getConstants() {
return constants;
}
}
Run Code Online (Sandbox Code Playgroud)
然而,我会重命名属性(和getter)以pageLinks获得更好的自我可记录性.
#{constantsBean.pageLinks.value}
Run Code Online (Sandbox Code Playgroud)
另一种方法是使用OmniFaces<o:importConstants>,根据您的问题历史,您已经熟悉OmniFaces,并且可能已经在您当前的项目中使用它.
<o:importConstants type="com.example.Constants" />
...
#{Constants.PAGE_LINKS.value}
Run Code Online (Sandbox Code Playgroud)
这样您就不需要将事物包装在应用程序范围的bean中.
从Primefaces 6.0开始,你也可以使用PrimeFaces importEnum(在导入之前是"Primefaces Extensions").
https://www.primefaces.org/showcase/ui/misc/importEnum.xhtml
| 归档时间: |
|
| 查看次数: |
15113 次 |
| 最近记录: |