Java @添加@Named时SessionScoped不起作用

Java @添加@Named时SessionScoped不起作用,java,jsf-2,glassfish-3,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() {

考虑以下支持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,而这个注释似乎是必需的(如果我错了,请纠正我)。这种行为的原因是什么?如何解决这个问题?

您不能将JSF与CDI注释混合使用。用这个或那个。在本例中,您需要导入而不是
javax.faces.bean.SessionScoped

这是可行的,但需要bean是可序列化的(这没有问题,我只是为了完整性添加了注释)顺便说一下,还建议让JSF
@SessionScoped
@ViewScoped
bean实现
可序列化
。JSF只发出警告而不发出错误。