如何在JSF中的应用程序级全局加载公共/可重用数据?

时间:2015-04-19 09:00:45

标签: jsf jsf-2 primefaces

我使用的是JSF-2.2,Primefaces-3.5和JDK-1.7。

我有一个注册页面,其中我有一个国家和城市的父子菜单关系,需要根据选定的父值动态加载。

目前我正在显示国家和州的名单!这就像一个魅力! :) How to display list of countries and cities in JSF

我的问题是,如果我们有n个用户访问该页面,我们正在创建在服务器上加载的n-Objects。我想减少负载和内存浪费

有没有办法加载数据并存储在应用程序的上下文中并在JSF中访问它们。

有用的参考资料:

How to Populate Child Menus in JSF

1 个答案:

答案 0 :(得分:1)

您可以从Balusc的answer @ApplicationScoped创建bean,并且只使用此bean来读取代码列表。然后,您可以将bean注入其他bean中,或者直接从xhtml中调用它。

你也可以在init()中加载并保留在Map<String, List<String>>的城市,其中key是country,value是cities。或者你可以懒惰地初始化城市:

Map<String, List<String>> map = new HashMap<>();

public synchronized List<String> getCities(String country) {
    if (!map.containsKey(country)) {
        List<String> cities = someService.getCities(country);
        map.put(country, cities);
        return cities;
    }
    return map.get(country);    
}

但是,如果条目可能随着时间的推移而变化(例如,在DB中进行其他系统更新/删除)@SessionScoped可能会更好,因为您不必记得重新加载应用程序/与@ApplicationScoped一样重启服务器。