Как передать информацию между компонентами в JSF 2? - PullRequest
1 голос
/ 18 марта 2011

У меня есть сценарий, и у меня пока нет четкой идеи, чтобы это сработало.

Вот пример сценария:

  1. У меня есть myView.xhtml файл, который можно отобразить в виде всплывающего окна или всплывающего диалогового окна простых лиц из 2 другого контейнера xhtml , скажем, container1.xhtml и container2.xhtml ( myView.xhtml включено с чем-то вроде этого? <ui:include src="myView.xhtml" />)
  2. И у нас также есть bean-объекты в области видимости, назовем их myViewBean , container1Bean и container2Bean
  3. container1Bean имеет свойство транзакцияДата и container2Bean имеет свойство transDate
  4. myViewBean sМетод @PostConstruct запросит базу данных на основепо параметру типа дата .
  5. В файле container1.xhtml, если пользователь нажимает кнопку, которая открывает всплывающее окно myView.xhtml , container1Bean должен быть в состоянии предоставить транзакции для myViewBean и myViewBean сможет выполнять запросы на основе этого в методе @PostConstruct.
  6. На container2.xhtml, если пользователь нажимает кнопку, которая вызывает всплывающее окно myView.xhtml , container2Bean должен иметь возможность предоставить transDate в myViewBean myViewBean сможет запрашивать на основе этого в методе @PostConstruct.

Я думал об использовании @ InjectContainer1Bean и @ Inject Container2Bean в MyViewBean , так что внутри MyViewBean , я могу получить транзакцияДата контейнера1Бин или трансДата контейнера2Бин .Чтобы определить, какой контейнерный бин активен, нужно проверить, какой из них не нулевой.

Но что, если контейнерные бины растут, могут быть другие контейнерные бины, использующие MyViewBean, и @ Inject ContainerXXBean будет расти в числе внутри MyViewBean .Для этого должны быть другие решения.

Пожалуйста, поделитесь идеями о том, как этого добиться .. Спасибо!: -)

Спасибо!

Ответы [ 2 ]

2 голосов
/ 19 марта 2011

Если вы хотите получить доступ только к содержимому других компонентов, вы можете сделать это программно.

Получить текущий экземпляр FacesContext из одного компонента.И используя этот контекст, вы можете получить экземпляр других bean-компонентов.

См. Эту иллюстрацию .Согласно заголовку вашего вопроса, вы хотите получить некоторую информацию между бобами.Это можно сделать, вызвав открытые методы другого компонента, которые могут быть специально созданы для этой цели.(сеттеры-геттеры).

1 голос
/ 18 марта 2011

Если container1Bean, myViewBean и container2Bean совместно используют некоторые свойства, почему бы не поместить их в новый bean-компонент?(давайте назовем его sharedBean, но я уверен, что вы найдете лучшее имя, адаптированное к вашему случаю).Затем вы можете внедрить sharedBean с помощью @ManagedProperty в каждый зависимый компонент.Давайте просто постараемся не использовать циклические ссылки.

Я также предлагаю пересмотреть вашу архитектуру.Вы уверены, что вам нужны все эти бобы, разделенные так же, как это?Это звучит как нечто, что будет трудно поддерживать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...