CDI отсутствует @ViewScoped и @FlashScoped
Почему в Java EE 6 CDI отсутствуют аннотации @ViewScoped и @FlashScoped? (особенно первое заставляет меня задуматься, потому что CDI происходит из мира шва, который уже знал очень похожий ScopeType.СТРАНИЦА...)
Каковы рекомендуемые обходные пути при использовании CDI? Использовать Шов 3?
Спасибо
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, которая в основном рефренирует карту. грани шва имеет однако захватил специфический пакет JSFjavax.faces.beanдля его аннотации@FlashScoped, но это определенно не из стандартного API JSF.См. также:
- добавить элементы в список в области запроса Bean - содержит некоторые конкретные примеры альтернатив CDI
Вы можете реализовать контекст и использовать @NormalScope для создания своей собственной области CDI witout, используя любую другую структуру или ожидая нового JEE7
- CDI запускает событие AfterBeanDiscovery после каждого вызова bean
- Вы можете использовать расширение CDI для @Observes этого события и добавить свою контекстную реализацию
- в реализации scope вы можете :
- Использовать контекстная, чтобы получить объект по его названию от ViewRoot FacesContext Map и возвращать его после каждого обратного вызова ajax
- Используйте CreationalContext, если имя Боба из первого шага не найдено, чтобы создать его в FacesContext ViewRoot Map
Для более глубокого объяснения я рекомендую эту ссылку : http://www.verborgh.be/articles/2010/01/06/porting-the-viewscoped-jsf-annotation-to-cdi/
Comments