Я запускаю приложение, используя JSF2.0 и Primefaces 2.2RC2
Я запустил профилировщик в своем проекте и определил, что в списке UISelectItems было узкое место. Список заполнялся примерно 6 раз на каждое действие в моем приложении.
Список UISelectItem заполнялся в методе получения, называемом getCountryList (), и выглядел он так
public UISelectItems getCountryList() throws Exception {
Collection List = new ArrayList();
List<Countries> c_list = myDao.getCountryList();
for( QcardCountries c : c_list ) {
list.add(new SelectItem(c.getCountryId().toString(), c.getCountryName());
}
UISelectItems countries = new UISelectItems();
countries.setValue(list);
return countries;
}
Это работает, когда я вызываю в представлениях, как это так
<f:selectItems binding="#{myBean.countryList}" />
но снова он вызывается примерно 6 раз для каждой кнопки или действия, которое я выполняю в приложении.
Затем я попытался переместить создание списка в метод, который был вызван в @PostContruct, но когда я это сделал, список не отображается, когда я использую
<f:selectItems binding="#{myBean.countryList}" />
Это просто выглядит как пустое. Кто-нибудь знает, как правильно создать список, чтобы он создавался только один раз, и его можно вызывать на протяжении всего сеанса пользователя для заполнения раскрывающегося списка?