Как я могу использовать @ConversationScoped - PullRequest
12 голосов
/ 15 августа 2011

Я пишу приложение JSF 2.0 и хочу использовать аннотации CDI вместо «эквивалентных» аннотаций JSF.Другими словами, @Model или @Named вместо @ManagedBean и @Inject вместо @ ManagedProperty.

Единственное, что я не могу заставить работать - это @ViewScoped, необходимый для компонентов AJAX.Единственный надежный обходной путь - это использование @SessionScoped, что не является хорошей практикой.

Какая правильная практика?Столько, сколько я ищу, я просто запутываюсь.

Это на GlassFish 3.1.1, который, как я понимаю, содержит Weld 1.1.0.

ОБНОВЛЕНИЕ: оригинальная форма этого вопросасказал, что не могу заставить @ConversationScoped работать.С тех пор я обнаружил свою ошибку и заставил ее работать так:

@Model
@ConversationScoped
public class Abean implements Serializable {

@Inject Conversation conversation;

// stuff omitted for brevity

public String getSomething() {
    if (conversation.isTransient()) conversation.begin();
    return "something";
}

Похоже, это помогает.Однако теперь мой вопрос изменился.Где именно вы должны вызывать разговор. Конец ()?Должен ли я написать фильтр, чтобы определить, когда пользователь покидает страницу?Или, если оставить его в покое, только когда будет отменена ссылка на экземпляр Abean ?

ВТОРОЕ ОБНОВЛЕНИЕ: очень хорошее обсуждение @ConversationScoped CDI, которое я нашел здесь.

Я все еще остаюсь с проблемой, как вызывать разговор. Конец ().Мой bean-компонент обеспечивает поддержку состояния с сохранением в браузере таблиц данных, обновленном через AJAX, и оптимальное место для вызова end () - это когда пользователь уходит со страницы.Несмотря на то, что я не написал фильтр для мониторинга страниц, я не вижу никакого способа сделать это.Любое предложение о "наилучшей практике" приветствуется.

Ответы [ 2 ]

3 голосов
/ 19 августа 2011

Это намного проще с областями (CDI) MyFaces CODI . У них лучше @ConversationScoped, и вам понравится @ViewAccessScoped за то, что вы пытаетесь.

1 голос
/ 23 июня 2012

обновление: JSF 2.2 (jsr 344, в предварительном рассмотрении черновика) добавляет для этого область CDI @FlowScoped. Подробнее ...

...