[原創(chuàng)]CDI(Weld)創(chuàng)建了多個@sessionScoped的bean的實例?
問題是這樣的...
按照Core JSF 3rd里面第三章做了quiz的練習。
運行起來發(fā)現(xiàn)QuizBean里面的response無論如何也取不到值。結(jié)果總為""。
Debug發(fā)現(xiàn)response的set成功了,但是一到answerAction()方法,response就恢復為初始狀態(tài)。
懷疑是否多次重復創(chuàng)建實例。即setResponse的實例跟被調(diào)用answerAction()的不是同一個實例。
添加構(gòu)造函數(shù),并且在構(gòu)造函數(shù)里面添加了System.out.println("xxx init");結(jié)果發(fā)現(xiàn)果然是多次創(chuàng)建實例。
結(jié)論,sessionScoped沒有起作用。google之。發(fā)現(xiàn)有個兄弟跟我有同樣的問題。見下連接http://community.jboss.org/thread/173555
根據(jù)Nicklas的回答,重新檢查了下注釋。
結(jié)果如下。
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里找不到實例。故重復創(chuàng)建了實例。@import url(http://www.aygfsteel.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);
按照Core JSF 3rd里面第三章做了quiz的練習。
運行起來發(fā)現(xiàn)QuizBean里面的response無論如何也取不到值。結(jié)果總為""。
Debug發(fā)現(xiàn)response的set成功了,但是一到answerAction()方法,response就恢復為初始狀態(tài)。
懷疑是否多次重復創(chuàng)建實例。即setResponse的實例跟被調(diào)用answerAction()的不是同一個實例。
添加構(gòu)造函數(shù),并且在構(gòu)造函數(shù)里面添加了System.out.println("xxx init");結(jié)果發(fā)現(xiàn)果然是多次創(chuàng)建實例。
結(jié)論,sessionScoped沒有起作用。google之。發(fā)現(xiàn)有個兄弟跟我有同樣的問題。見下連接http://community.jboss.org/thread/173555
根據(jù)Nicklas的回答,重新檢查了下注釋。
結(jié)果如下。
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里找不到實例。故重復創(chuàng)建了實例。@import url(http://www.aygfsteel.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);
posted on 2012-01-10 11:08 辰 閱讀(814) 評論(0) 編輯 收藏 所屬分類: JSF2.0