Разделить компонент CDI в оконной области для разделения задач

У меня есть приложение JSF с RichFaces 4.5.8, deltaspike для компонентов CDI и EJB, которые работают в EAP 6.3. У меня есть страница с двумя таблицами и несколькими popupPanels. Страница поддерживается контроллером bean-компонента CDI в WindowScope. К настоящему времени страница становится все больше и больше, потому что popupPanels имеют множество элементов управления и действий.

Страница xhtml разделена составными компонентами и ui:include, которые отлично работают, но bean-компонент CDI становится больше. Я хотел бы переместить методы действия popupPanels в другие bean-компоненты CDI, но для меня это звучит странно, иметь несколько bean-компонентов CDI windowScoped на одной странице. Что бы вы сделали, чтобы разделить большой компонент CDI?

С наилучшими пожеланиями


person dako-ak    schedule 28.08.2015    source источник
comment
Что такое компоненты WindowsScoped CDI?   -  person Tiny    schedule 28.08.2015
comment
Компоненты @WindowScoped от deltaspike, см. deltaspike.apache.org/documentation/jsf.html.   -  person dako-ak    schedule 28.08.2015
comment
Проблем с таким разделением нет. Window-Scoped просто означает, что экземпляры ограничены определенным окном. Поэтому у вас может быть любое количество таких экземпляров. Вы можете сравнить это с сеансом на окно. Так что просто используйте/разделите свою логику, как если бы вы делали это с bean-компонентами с областью сеанса. Намерение НЕ состоит в том, чтобы иметь один экземпляр на странице или даже больше страниц. Создание контроллера для каждой страницы — лишь один из многих возможных подходов.   -  person Dar Whi    schedule 28.08.2015
comment
Спасибо, я проверю это   -  person dako-ak    schedule 31.08.2015


Ответы (1)


Комментарий @DarWhi верен - вы можете использовать столько bean-компонентов WindosScoped на своей странице, сколько хотите, все они будут жить только с одним окном. Нет никаких ограничений, что вы должны использовать только один bean-компонент на странице JSF. Вам просто нужно дать имя с помощью @Named всем таким компонентам.

Если вы предпочитаете иметь только один bean-компонент WindowScoped для каждого окна, вы все равно можете разделить свою логику на несколько bean-компонентов. Просто вставьте все дочерние компоненты в компонент WindowScoped, а затем укажите действия в дочерних компонентах, используя точечную нотацию: #{viewScopedBean.childBean.action. Вы можете использовать переменные для хранения ссылок на дочерние компоненты и сделать свой код в JSF короче, см. jsf-страница">ответ.

person OndroMih    schedule 30.08.2015
comment
Спасибо, я проверю это. - person dako-ak; 31.08.2015