JSF2 управляемая аннотация bean + область + путаница внедрения - PullRequest
5 голосов
/ 14 марта 2011

Я бы хотел добиться этого идеализма:

  1. Чтобы иметь только 1 реализацию для контейнера JSF Bean, хотелось бы использовать только Spring или Weld, но не оба. В настоящее время я использую Spring для своего бэкэнда, поэтому я предпочитаю Spring.
  2. Чтобы иметь только 1 аннотацию, выберите между @ManagedBean, @Named, @ Model
  3. Для возможности использования всех поддерживаемых областей, таких как @RequestScoped, @SessionScoped, @ViewScoped, @FlashScoped, возможно также @ ConversationScoped
  4. Бины JSF могут быть добавлены с помощью Spring-Services-Services (Внутренние сервисы), возможно, с использованием @Inject или @ Autowired

Пока я не нашел лучшей комбинации для достижения этой цели, потому что, насколько я знаю, пожалуйста, поправьте меня, если я ошибаюсь:

  1. @ ManagedBean нельзя вводить с помощью весенних сервисов?
  2. @ Named может быть добавлен в сервисы Spring с помощью @Inject, но @Named использует Weld. Могу ли я просто использовать пружину для управления @Named вместо Weld?
  3. @ Named не поддерживает @ViewScoped и FlashScope?

Пожалуйста, поделитесь своими мыслями и опытом.

Спасибо: -)


ОБНОВЛЕНИЕ 15 марта 2011

Нашел интересную страницу , которая описывает, как заменить Jboss Weld на Spring в качестве реализации JSR 299 CDI. Так что в основном на вопрос № 2 дан ответ. На номер 1 также ответили косвенно, так как теперь я могу вводить весенние услуги.

Но все же вопрос номер 3 остается. Мне было бы очень полезно, если бы я мог использовать @ViewScoped и Flash Scope в @Named, что-то вроде этой статьи . Флэш-область реализации еще не видна, но самая близкая, которую я могу получить, это эта страница .

Надеюсь, замена сварного шва пружиной, поскольку реализация jsr 299 все еще позволит мне использовать @ ConversationScoped.

Нужно проверить вещи сейчас, пожелайте мне удачи: -)


ОБНОВЛЕНИЕ 18 МАРТА 2011

Успешно используйте Spring 3 вместо сварки для выполнения @Named, @Inject. Важно установить el-resolver в face-config.xml.

AFAIK, Spring 3 в настоящее время еще не поддерживает CDI, поэтому bye2 @ ConversationScoped.

Для определения области действия я все еще должен использовать @Scope («запрос») или @Scope («сессия»), но если я предпочитаю @RequestScoped (javax.enterprise.context.RequestScoped) и @SessionScoped, я могу сделать использование моста, предусмотренного этой статьей .

Область («вид») для весны от эта статья работает как по волшебству: -)

Однако осталась одна проблема - как передавать объекты между Scope ("view") - бинами. Пожелай мне удачи!


обновление

Ааа .. наконец-то сделано .. Передача переменных с использованием Flash, предоставляемого JSF2, действительно работает как волшебство. Для этого мне не нужна сторонняя реализация.

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

Единственное, чего не хватает, так это объема разговора, который пока не представляет для меня большой проблемы. Будем надеяться, что будущая весна поддержит эту тему разговора.

Приветствия: -)

Ответы [ 2 ]

3 голосов
/ 02 марта 2012

Я могу успешно добавить бин Spring, используя аннотацию ManagedProperty, как показано ниже.Это на JSF Managed Bean.Spring bean предназначен для бэкэнда, и я предпочитаю Spring для бэкэнда.

@ManagedProperty(name="userRepository", value="#{userRepository}")
private UserRepository userRepository;
//Setter and/or Getter

значение здесь самое важное.На самом деле это бобовое имя весны.Надеюсь, это поможет.

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

Weld (на самом деле, эталонная реализация из JSR-299, контекст и внедрение зависимостей , также известная как Java EE 6 CDI), была все более и менее изобретена для замены Spring в Java EE.6 сред.Я бы предложил использовать Java EE 6 CDI вместо Spring.Зачем вам использовать стороннюю платформу, если Java EE 6 предоставляет такую ​​же функциональность из коробки?

Если бэкэнд Spring действительно не может быть изменен, то я бы предложил придерживаться его, а не смешивать с JavaEE 6 CDI аннотации, чтобы уберечь себя от путаницы и головной боли от обслуживания.

...