Я пишу приложение 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 () - это когда пользователь уходит со страницы.Несмотря на то, что я не написал фильтр для мониторинга страниц, я не вижу никакого способа сделать это.Любое предложение о "наилучшей практике" приветствуется.