问题是这样的...
按照Core JSF 3rd里面第三章做了quiz的练习。
运行起来发现QuizBean里面的response无论如何也取不到值。结果总为""。
Debug发现response的set成功了,但是一到answerAction()方法,response就恢复为初始状态。
怀疑是否多次重复创建实例。即setResponse的实例跟被调用answerAction()的不是同一个实例。
添加构造函数,并且在构造函数里面添加了System.out.println("xxx init");结果发现果然是多次创建实例。
结论,sessionScoped没有起作用。google之。发现有个兄弟跟我有同样的问题。见下连接
http://community.jboss.org/thread/173555
根据Nicklas的回答,重新检查了下注释。
结果如下。
javax.inject.Named与javax.enterprise.context.SessionScoped同为CDI的注释。
javax.faces.bean.ManagedBean与javax.faces.bean.SessionScoped为JSF的注释。
如果要使用CDI那注册也需要使用CDI的方式来注册即Named。否则将无法找到。
我的问题是使用了javax.inject.Name并且使用了javax.faces.bean.SessionScoped。所以CDI在session里找不到实例。故重复创建了实例。@import url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);