2017-01-12 33 views
0

我遇到了Primefaces 5和JSF 2.1的問題。在對話範圍內的Bean中構建一個列表

現在無法發佈代碼,因爲我在我的平板電腦上,但稍後我會給出基本說明和上傳代碼。

我有一個ConversationScoped CDI bean和一個帶有5個文本字段的JSF頁面,映射到一個實體,一個primefaces數據視圖和一個按鈕。我想要做的就是不斷地將字段中的數據添加到dataView中。

我在bean類中有一個List,private List<dataEntity> data = new ArrayList<dataEntity>

和我有一個方法,通過按下按鈕將數據添加到數組,但每次添加數據時,列表中的所有條目將被替換爲最新的條目。

本質列表中包含的第N個條目

我想過節省每次進入數據庫的拳頭和填充從列表的N個副本,但它似乎不合邏輯的是。

這讓我在過去的兩天中難倒了。任何人都可以提出一些解決這個問題如果可能的話,我想使用CDI bean而不是JSF Managed。

感謝

+0

發佈您的代碼並澄清您的意思是所有條目被替換 –

+0

您何時開始對話?你有沒有把它標記爲長時間運行?每按一下按鈕,如果對話沒有長時間運行,並且下一個請求中不存在cid,則您的conversationscoped bean實際上就是requestcoped beans – maress

回答

0

既然你這裏有沒有代碼,我將不得不採取一些猜測,但我認爲這個問題是您@ConversationScoped豆,或者更確切地說,它的生命週期的理解。

除非你與對方通話長時間運行,該範圍將同樣表現於@RequestScoped - 它會掉每個請求後拋出,並重新創建新時表示one.Which在其中的List將重新創建每次。

你想在這裏要麼使談話長時間運行,這通常你通過以下方式是什麼:

@ConversationScoped 
public class YourBean { 

    @Inject Conversation conversation 

    // call this sometime within the first request 
    public void conversationStartingMethod() { 
     conversation.begin(); 
    } 

} 

或者,你可以讓你的bean @SessionScoped代替,這將使它活全HTTP會話(或除非超時/無效)。

+0

對不起,沒有代碼,我正在旅行atm並且沒有計算機訪問權限。我的對話開始正常,但是當我將第一項添加到列表中時,它的功能正常,因此我得到一個類型爲dataEntity的條目,稱爲e1,但是當我添加第二個條目時,稱爲e2,該列表包含兩個條目,但都是e2和等等等等。本質上列表中包含第N個條目的N – user

+0

嗯,我明白你的意思了。我會等到你發佈代碼 - 這聽起來更像是你的代碼中的一個小錯誤(你將它存儲到列表中的方式),而不是其他任何東西。 – Siliarus

相關問題