問題是這樣的...
按照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://m.tkk7.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);