添加@Named时@SessionScoped不起作用

时间:2011-06-05 18:34:27

标签: java jsf-2 glassfish-3

考虑以下支持bean:

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时,它似乎不再具有会话范围。按钮仍然有效(点击在服务器端处理),但计数器的值始终保持为零。我正在使用注释,因为在我的实际应用程序中,我需要将其他bean注入到这个注释中,并且这个注释似乎是必需的(如果我错了,请纠正我)。这种行为的原因是什么?我该怎么做才能解决它?

1 个答案:

答案 0 :(得分:9)

您无法将JSF与CDI注释混合使用。使用其中一个。在这种情况下,您需要导入javax.enterprise.context.SessionScoped而不是javax.faces.bean.SessionScoped