亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

@SessionScoped bean失去作用域并一直被重新創建,字段變為空

@SessionScoped bean失去作用域并一直被重新創建,字段變為空

慕絲7291255 2019-11-20 12:31:54
我在JSF 2.0項目中使用SessionScoped bean有一個非常奇怪的問題。使用Netbeans 6.9.1,Glassfish 3服務器和PrimeFaces 3作為JSF組件庫。這是一些代碼:package com.hia.jsf;import com.hia.netlabel.jpa.Genre;import com.hia.netlabel.jpa.Label;import java.io.Serializable;import java.util.List;import javax.annotation.PostConstruct;import javax.enterprise.context.SessionScoped;import javax.faces.bean.ManagedBean;import javax.faces.bean.ManagedProperty;@ManagedBean@SessionScopedpublic class LabelDetailJSF implements Serializable{@ManagedProperty("#{genreLabelListJSF}")private GenreLabelListJSF genreLabelListJSF;private List<Genre> DetailLabelGenreList;private Label DetailLabel;/** Creates a new instance of LabelDetailJSF */public LabelDetailJSF() {}@PostConstructpublic void init(){           System.out.print("Running init LabelDetailJSF");           if(genreLabelListJSF.getSelectedLabel()!=null)           {                System.out.print("genreLabelListJSF was not null");                this.DetailLabelGenreList=genreLabelListJSF.getSelectedLabel().getGenreList();                this.DetailLabel= (genreLabelListJSF.getSelectedLabel());           }           if(this.DetailLabelGenreList==null){               System.out.println("Bloody thing became null");           }}/** * @return the DetailLabel */public Label getDetailLabel() {    return DetailLabel;}因此,基本上,我已經將另一個稱為GenreLabelListJSF的會話范圍的bean注入LabelDetailJSF中。我想在dataTable中顯示DetailLabelGenreList。這是用于顯示數據表的XHTML代碼段<p:dataTable  id="detailLabelGenreGrid" value="#    {labelDetailJSF.detailLabelGenreList}" var="genre"  paginator="true"  styleClass="text70" rows="2" >                            <p:column  style="min-width:196px;">                                 #{genre.genreName}                            </p:column>              </p:dataTable>當頁面加載時,我最初獲得的表中包含一些行。當我單擊分頁按鈕時,這就是樂趣的開始。我檢查了所有System.out語句的輸出,并在最初加載頁面時發現了以下內容。
查看完整描述

2 回答

?
qq_遁去的一_1

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表達式中創建一個新實例。


查看完整回答
反對 回復 2019-11-20
?
天涯盡頭無女友

TA貢獻1831條經驗 獲得超9個贊

是的,我不時睡覺。CDI是基于注釋的依賴項注入框架,可以與除JSF之外的任何其他框架結合使用。就像早在J2EE時代的春天一樣。但是,并不總是建議在一個項目中混合使用JSF和CDI批注。使用JSF或CDI。因此,請使用JSF @ManagedBean @SessionScoped或CDI @Names @SessionScoped。CDI具有imo,但是在JSF Web應用程序中有一個主要缺點,它沒有提供JSF“視圖范圍”的注釋(可通過獲得)@ViewScoped。

查看完整回答
反對 回復 2019-11-20
  • 2 回答
  • 0 關注
  • 813 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號