在 JSF 中访问静态属性
Posted
技术标签:
【中文标题】在 JSF 中访问静态属性【英文标题】:Access static property in JSF 【发布时间】:2015-05-20 03:26:15 【问题描述】:我的一个支持 bean 中有一个静态的选择项列表:
private static List<SelectItem> countries = new ArrayList<SelectItem>();
使用以下 getter 和 setter:
public static List<SelectItem> getCountries()
return countries;
public static void setCountries(List<SelectItem> countries)
LoadSelectItemsBean.countries = countries;
我无法通过我的 Xhtml 页面访问静态列表。我试过的代码如下:
<ace:simpleSelectOneMenu id="countryField"
value="#generalCarrierDataViewBean.carrierBean.countryId">
<f:selectItems value="#loadSelectItemsBean.countries" />
<ace:ajax />
</ace:simpleSelectOneMenu>
问题线是:
<f:selectItems value="#loadSelectItemsBean.countries" />
导致的异常是:
javax.el.PropertyNotFoundException: /pages/GeneralCarrierData.xhtml @394,64 value="#loadSelectItemsBean.states": Property 'states' not found on type com.oag.reference.util.LoadSelectItemsBean
有人可以建议如何正确地从支持 bean 引用静态属性吗?
谢谢
【问题讨论】:
【参考方案1】:只需创建一个返回静态属性的非静态方法:
// here you have a static String
private static String static_str;
public static String getStatic_str()
return static_str;
// in jsf page: #myClass.str
public String getStr()
return static_str;
【讨论】:
【参考方案2】:属性是根据定义而不是static
。因此,getter 和 setter 不能是静态的,尽管它们可以反过来引用静态变量。但外界看不到这一点。
您有 3 个选择:
从 getter 中移除 static
修饰符。整个 setter 是不必要的,你可以删除它。
public List<SelectItem> getCountries()
return countries;
如果您确实坚持访问静态“属性”(函数),请创建一个 EL 函数。可以在这个答案中找到详细信息:How to create a custom EL function to invoke a static method?
将整个List<SelectItem>
变成enum
并利用OmniFaces <o:importConstants>
。可以在这个答案中找到详细信息:How to create and use a generic bean for enums in f:selectItems?
【讨论】:
谢谢,我可能会沿着选项 1 的路线,将我的 bean 更改为我之前的配置方式。以上是关于在 JSF 中访问静态属性的主要内容,如果未能解决你的问题,请参考以下文章