访问JSF中的静态属性

Lia*_*n94 7 jsf icefaces el

我的一个支持bean中有一个静态的选择项列表:

private static List<SelectItem> countries = new ArrayList<SelectItem>();
Run Code Online (Sandbox Code Playgroud)

使用以下getter和setter:

public static List<SelectItem> getCountries()     {
    return countries;
}

public static void setCountries(List<SelectItem> countries) {
    LoadSelectItemsBean.countries = countries;
}
Run Code Online (Sandbox Code Playgroud)

我无法通过我的XHTML页面访问静态列表.我试过的代码如下:

<ace:simpleSelectOneMenu id="countryField"
   value="#{generalCarrierDataViewBean.carrierBean.countryId}">
   <f:selectItems value="#{loadSelectItemsBean.countries}" />
   <ace:ajax />
</ace:simpleSelectOneMenu>
Run Code Online (Sandbox Code Playgroud)

问题在于:

 <f:selectItems value="#{loadSelectItemsBean.countries}" />
Run Code Online (Sandbox Code Playgroud)

结果的例外是:

javax.el.PropertyNotFoundException: /pages/GeneralCarrierData.xhtml @394,64 value="#{loadSelectItemsBean.states}": Property 'states' not found on type com.oag.reference.util.LoadSelectItemsBean
Run Code Online (Sandbox Code Playgroud)

有人可以建议如何从支持bean正确引用静态属性吗?

谢谢

Bal*_*usC 13

属性是根据定义而不是static.因此,getter和setter可以简单地不是静态的,尽管它们可以反过来引用静态变量.但外界并没有看到这一点.

你有3个选择:

  1. static从getter中删除修改器.整个setter是不必要的,你可以删除它.

    public List<SelectItem> getCountries()     {
        return countries;
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 如果你真的坚持访问静态"属性"(函数),请创建一个EL函数.详细信息可以在这个答案中找到:如何创建自定义EL函数来调用静态方法?

  3. 将整个List<SelectItem>事物变成一个enum并使用OmniFaces<o:importConstants>.详细信息可以在这个答案中找到:如何在f:selectItems中为枚举创建和使用通用bean?