CDI отсутствует @ViewScoped и @FlashScoped



Почему в Java EE 6 CDI отсутствуют аннотации @ViewScoped и @FlashScoped? (особенно первое заставляет меня задуматься, потому что CDI происходит из мира шва, который уже знал очень похожий ScopeType.СТРАНИЦА...)



Каковы рекомендуемые обходные пути при использовании CDI? Использовать Шов 3?



Спасибо

524   2  

2 ответов:

@ViewScoped специфичен для фреймворка MVC JSF, а не для фреймворка внедрения зависимостей CDI. Область представления живет до тех пор, пока вы взаимодействуете с одним и тем же представлением JSF. CDI на самом деле не имеет понятия "взгляды". Альтернативой CDI является @ConversationScoped который живет дольше, чем область запроса, но короче, чем область сеанса. Вы только должны контролировать прекращение самостоятельно. Вы можете при необходимости использовать MYFACES CODI для соединения JSF @ViewScoped С CDI @Named зернышки. Предстоящий JSF 2.2 будет иметь CDI-совместимый @ViewScoped в пакете javax.faces.view.

@FlashScoped не существует в JSF. JSF flash scope существует в основном из карты, которая поддерживается короткоживущим файлом cookie, который переживает http-перенаправления. Вы не можете позволить JSF поместить управляемые бобы в эту область. Вы должны вручную поместить / получить значения в / из карты самостоятельно и / или использовать ссылку #{flash} в EL, которая в основном рефренирует карту. грани шва имеет однако захватил специфический пакет JSF javax.faces.bean для его аннотации @FlashScoped, но это определенно не из стандартного API JSF.

См. также:

Вы можете реализовать контекст и использовать @NormalScope для создания своей собственной области CDI witout, используя любую другую структуру или ожидая нового JEE7

  • CDI запускает событие AfterBeanDiscovery после каждого вызова bean
  • Вы можете использовать расширение CDI для @Observes этого события и добавить свою контекстную реализацию
  • в реализации scope вы можете :
    1. Использовать контекстная, чтобы получить объект по его названию от ViewRoot FacesContext Map и возвращать его после каждого обратного вызова ajax
    2. Используйте CreationalContext, если имя Боба из первого шага не найдено, чтобы создать его в FacesContext ViewRoot Map

Для более глубокого объяснения я рекомендую эту ссылку : http://www.verborgh.be/articles/2010/01/06/porting-the-viewscoped-jsf-annotation-to-cdi/

Comments

    Ничего не найдено.