我的一个支持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正确引用静态属性吗?
由于
答案 0 :(得分:13)
属性根据定义而不是static
。因此,getter和setter可以简单地不是静态的,尽管它们可以反过来引用静态变量。但外界并没有看到这一点。
您有3个选项:
从getter中删除static
修饰符。整个setter是不必要的,你可以删除它。
public List<SelectItem> getCountries() {
return countries;
}
如果您真的坚持访问静态&#34;属性,请创建一个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 :(得分:0)
只需创建一个返回静态属性的非静态方法:
System.Math.Pow(2, (noteNumber - referenceNoteNumber) / 12.0) * referenceFrequency