Упоминается также CDI-совместимый @ javax.faces.flow.ViewScoped. Это может быть интересно для некоторых.

у приложение 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)

Ваш ответ на вопрос