2 回答
TA貢獻1725條經驗 獲得超8個贊
您使用了錯誤的@SessionScoped注釋。
如果您已使用JSF @ManagedBean批注注冊了bean ,則需要@SessionScoped從JSF(javax.faces)包中導入,如下所示:
import javax.faces.bean.SessionScoped;
當您在JSF托管Bean上錯誤地使用CDI范圍時,則JSF托管Bean實際上沒有JSF范圍,它會退回到其默認值@RequestScoped,即在每個HTTP請求中創建一個新實例。
如果您已使用CDI @Named批注注冊了bean ,則需要@SessionScoped從CDI(javax.enterprise.context)包中導入,如下所示:
import javax.enterprise.context.SessionScoped;
當您在CDI托管Bean上錯誤地使用JSF范圍時,那么CDI托管Bean實際上就沒有CDI范圍,它會退回到其默認@Dependent范圍,從而在每個EL表達式中創建一個新實例。
TA貢獻1831條經驗 獲得超9個贊
是的,我不時睡覺。CDI是基于注釋的依賴項注入框架,可以與除JSF之外的任何其他框架結合使用。就像早在J2EE時代的春天一樣。但是,并不總是建議在一個項目中混合使用JSF和CDI批注。使用JSF或CDI。因此,請使用JSF @ManagedBean @SessionScoped或CDI @Names @SessionScoped。CDI具有imo,但是在JSF Web應用程序中有一個主要缺點,它沒有提供JSF“視圖范圍”的注釋(可通過獲得)@ViewScoped。
添加回答
舉報
