随笔 - 3, 文章 - 152, 评论 - 17, 引用 - 0
数据加载中……

[原创]CDI(Weld)创建了多个@sessionScoped的bean的实例?

问题是这样的...
按照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);

posted on 2012-01-10 11:08 阅读(807) 评论(0)  编辑  收藏 所属分类: JSF2.0


只有注册用户登录后才能发表评论。


网站导航: