Как НЕ инициализировать beans при загрузке страницы, связанной с условно отображаемым контентом

У меня есть одна страница с условно отображаемым контентом, управляемая несколькими ссылками в боковом меню. Весь этот контент имеет datatable, который по умолчанию отображается как false. Все работает, за исключением того, что когда страница загружается, все bean-компоненты выполняются, и все bean-компоненты выполняют дорогостоящую работу с базой данных.

Я бы хотел, чтобы при нажатии пользователем бокового меню соответствующая таблица данных отображалась, и только после этого был инициализирован связанный управляемый компонент. Как я могу этого добиться?


person carlo del rosario    schedule 02.03.2015    source источник


Ответы (2)


У вас есть два основных варианта:

  1. Не используйте ajax для навигации. Вместо этого используйте GET. См. Также Как ориентироваться в JSF? Как сделать так, чтобы URL отображал текущую страницу (а не предыдущую).

  2. Или не отображайте контент условно. Вместо этого создавайте контент условно. См. Также Как динамически включать содержимое с помощью ajax-refresh по меню навигации? (JSF SPA)

person BalusC    schedule 02.03.2015

Я недавно столкнулся с такой проблемой. Я решил использовать то же условие, которое я использую для принятия решения о рендеринге или не рендеринге того или иного компонента, чтобы решить, инициализировать или не инициализировать его поддерживающие переменные. Например, у вас есть страница JSF с кодом:

<h:outputText rendered="#{bean.isRendered()}" value="#{bean.text}"/>

и bean следующее:

@PostConstruct
public void init(){
     if(isRendered){
           text = "Hello World";
     }
}
person Anatoly    schedule 12.03.2015