JSF请求范围Bean中的静态数据列表框?

JSF请求范围Bean中的静态数据列表框?,jsf,Jsf,在由JSF实现呈现的屏幕中,我必须显示一个静态下拉列表或列表框(这意味着值没有改变),因此我决定使用一个选择项列表,在列表的getter中,我填充所有选择项,如下所示 List.add(new SelectItem(VALUE,TEXT)) and so on.. 如果我用这种方式-有什么陷阱?我将此列表设置为静态列表,因为这对于JSF实现创建的所有请求范围bean都是通用的。这样可以吗 有时,如果触发多个请求,则会添加两次项。是否存在应用程序范围?或者做这些事情的标准方式是什么 我也在研究

在由JSF实现呈现的屏幕中,我必须显示一个静态下拉列表或列表框(这意味着值没有改变),因此我决定使用一个选择项列表,在列表的getter中,我填充所有选择项,如下所示

List.add(new SelectItem(VALUE,TEXT)) and so on.. 
如果我用这种方式-有什么陷阱?我将此列表设置为静态列表,因为这对于JSF实现创建的所有请求范围bean都是通用的。这样可以吗

有时,如果触发多个请求,则会添加两次项。是否存在应用程序范围?或者做这些事情的标准方式是什么

我也在研究API。有时这样更快

我正在使用JSF Apace My Faces 1.2,没有Tomahawk或任何额外的libs

谢谢

有时,如果触发多个请求,则会添加两次项


这表明您正在getter方法中添加如下项

public class Bean {
    private List<SelectItem> items = new ArrayList<SelectItem>();

    public List<SelectItem> getItems() {
        items.add(new SelectItem("value1", "label1"));
        items.add(new SelectItem("value2", "label2"));
        items.add(new SelectItem("value3", "label3"));
        return items;
    }
}
是否有适用范围

有。只需使用
应用程序

或者做这些事情的标准方式是什么

一个应用程序范围的bean是一个不错的选择

另见:

这表示您正在getter方法中添加项,或者正在使用会话范围的bean,并且仅在属性声明或bean构造期间清除/构造列表。这不好。您应该在bean构造、初始化或@PostConstruct期间创建并填充列表。-上述陈述是否不矛盾?我不明白!!!嗨,巴卢斯克,你的意思是说在构造函数中做这个吗?另外,我也可以
public class Bean {
    private List<SelectItem> items;

    public Bean() {
        items = new ArrayList<SelectItem>();
        items.add(new SelectItem("value1", "label1"));
        items.add(new SelectItem("value2", "label2"));
        items.add(new SelectItem("value3", "label3"));
    }
}
public class Bean {
    private List<SelectItem> items;

    {
        items = new ArrayList<SelectItem>();
        items.add(new SelectItem("value1", "label1"));
        items.add(new SelectItem("value2", "label2"));
        items.add(new SelectItem("value3", "label3"));
    }
}
public class Bean {
    private List<SelectItem> items;

    @PostConstruct
    public void init() {
        items = new ArrayList<SelectItem>();
        items.add(new SelectItem("value1", "label1"));
        items.add(new SelectItem("value2", "label2"));
        items.add(new SelectItem("value3", "label3"));
    }
}