2012-05-24 3 views
0

Я использую CDI (Weld), и у меня возникла проблема, надеюсь, что вы сможете помочь. У меня есть ряд Праймов selectOneMenu, где значение, выбранное в одном, используется для заполнения следующего. Проблема в том, что мне нужно использовать SessionScoped для моего ManagedBean для получения значений уже выбранных элементов. Я знаю, что JSF имеет ViewScoped, который в этом случае очень помог, но поскольку я использую CDI, это не вариант. Шов тоже не вариант. Существует обходное решение для использования, например, RequestScoped, или мне действительно нужно использовать SessionScoped для моего компонента?Как сохранить состояние во время вызова ajax с использованием CDI

Спасибо!

ответ

1

Взгляните на MyFaces CODI для их ViewScope или создавать свои собственные CDI осущий из ViewScope :)

+0

Да, что-то видел в MyFaces CODI, но поскольку я уже слишком много смешиваю (JSF, прайс-листы, богатые поверхности, сварка и т. Д.), Я не хотел добавлять новый. Но пока это похоже на мой лучший вариант. Я хотел, чтобы обходное решение не использовало SessionScoped или другую структуру, любые идеи? – Montolide

+0

Напишите свой собственный объем. – LightGuard

+0

Слишком много проблем = P Попробует CODI, спасибо! – Montolide

2

Ничего не мешает вам использовать управляемые бобы JSF и CDI-компоненты в одно и то же время. Например, вы можете иметь в нем @javax.faces.bean.ViewScoped @javax.faces.bean.ManagedBean и @javax.inject.Inject CDI. Итак, если область обзора правильно подходит для решения проблемы, используйте ее и используйте. Я тестировал это с помощью сервера GlassFish 3.1.2 (JSF 2.1).

Другой вариант - использовать CDI @javax.enterprise.context.ConversationScoped (http://docs.jboss.org/weld/reference/1.1.0.Final/en-US/html/scopescontexts.html#d0e1841). Это лучше всего работает в сценариях, включающих последовательность запросов/представлений с четко определенными начальными и конечными точками, где вы можете начинать и заканчивать разговор.

+0

Нет, это не сработает, вы получите два экземпляра объекта, один созданный JSF и другой CDI. В JSF 2.2 это не проблема. JSF 2.0 был завершен до того, как JSR 299 (CDI) был завершен и не имел надлежащей интеграции. MR для JSF 2 (2.1) также не добавляло никаких интеграций CDI. – LightGuard

+0

Как сказал LightGuard, это действительно проблема. Если я использую ViewScoped и ManagedBean, у меня будут проблемы с другими объектами, вложенными в него, поскольку они не управляются CDI. LightGuard, мне стало интересно узнать о интеграции JSF 2.2 (в более поздней версии), можно ли сделать так, как сказал Брайан? – Montolide

+1

@LightGuard, у меня нет проблем с этим. Чтобы быть ясным, я не смешиваю аннотации JSF и CDI на bean-компоненте. Боб аннотируется '@ViewScoped @ ManagedBean' и имеет аннотированные поля' @ Inject'. Я просто установил точку останова в конструкторе, и он называется только один раз (по JSF) и получает инъекции CDI-компонентов. Могу ли я случайно использовать неуказанное поведение? Я запускаю запас GlassFish 3.1.2 (с Mojarra 2.1.6 и Weld 1.1.4). Я хотел бы это понять. Знаете ли вы о спецификациях JSF-таргетинга на 2.2, которые я могу прочитать? – Brian