@SessionScoped не работает при добавлении @Named - PullRequest
3 голосов
/ 05 июня 2011

Рассмотрим следующий компонент поддержки:

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

@ManagedBean
@SessionScoped
public class Counter {

    int counter;

    public Counter() {
        this.counter = 0;
    }

    public void Increment() {
        this.counter++;
    }

    public void Decrement() {
        this.counter--;
    }

    public int getCounter() {
        return this.counter;
    }

}

Я создал JSF-страницу, которая отображает значение счетчика и имеет две кнопки, чтобы увеличивать и уменьшать его. Работает как положено. Тем не менее, когда я добавляю аннотацию javax.inject.Named к компоненту, он больше не имеет области видимости сеанса. Кнопки все еще работают (щелчок обрабатывается на стороне сервера), но значение счетчика всегда остается нулевым. Я использую аннотацию, потому что в моем реальном приложении мне нужно добавить другие bean-компоненты в эту, и эта аннотация, кажется, необходима (пожалуйста, исправьте меня, если я ошибаюсь). В чем причина такого поведения? Что я могу сделать, чтобы обойти это?

1 Ответ

9 голосов
/ 05 июня 2011

Нельзя смешивать JSF с аннотациями CDI. Используйте один или другой. В этом случае вам нужно импортировать javax.enterprise.context.SessionScoped вместо javax.faces.bean.SessionScoped.

...