2010-07-14 30 views
2

我正在使用Java EE6和JSF來製作簡單的CRUD應用程序。Jsf頁面不顯示新添加的值

在我的許多JSF頁面中,我有一個selectOneMenu供用戶選擇現有項目。例如,如果用戶添加「考試」,他/她可以從組合框中選擇「部門」,因爲他們具有一對多的關係。

問題是,每當添加新部門時,組合框值都不會更新,直到會話超時。我需要使用SessionScoped支持bean,因爲我需要這些值在多個請求中持續存在。

下面是我用填充selectOneMenu用於一個功能(不完全如上所述,但非常相似的例子):

public SelectItem[] getExamsByDepartment(){ 
     if(departmentMaster!=null){ 
      Collection<ExamMaster> examMasterCollection = departmentMaster.getExamMasterCollection(); 
      //Problem: newly added exams aren't shown until session is re-created 
      if (examMasterCollection != null && examMasterCollection.size() > 0) { 
       SelectItem[] selectItem = new SelectItem[examMasterCollection.size()]; 
       Iterator<ExamMaster> i = examMasterCollection.iterator(); 
       int count = 0; 
       while (i.hasNext()) { 
        ExamMaster tmpExamMaster = i.next(); 
        selectItem[count++] = new SelectItem(tmpExamMaster, tmpExamMaster.getExamName()); 
       } 
       return selectItem; 
      } 
     } 
     SelectItem[] selectItem = new SelectItem[1]; 
     selectItem[0] = new SelectItem("", "[No exams found]"); 
     return selectItem;   
    } 

是否存在被我可以破壞並重新創建任何解決方法會議?或者我可以通過其他方式解決這個問題?

編輯:我想這個問題歸結爲,爲什麼收不插入一條記錄後更新,即使一個一對多的關係是持久性類

編輯2定義:不要使用該集合,我現在使用命名查詢,並按預期提取新記錄。我曾假定該集合應該自動更新。也許這不是真的?

回答

1

編輯2:除了使用 收集的,我使用的是命名查詢 現在,它獲取新紀錄 預期。我曾假設 集合應該自動更新爲 。也許這不是 是真的?

對象的集合只有在它重新同步到數據庫時纔會更新。如果您沒有明確重新同步到數據庫,則不會更新。

會話中的對象將它的值的副本,並不需要返回到數據庫,除非事實上告訴它。

3

通常,爲這些情況設置會話範圍的bean並不是一個好主意。讓你的豆@ViewScoped

此外,每當您添加一個項目時,重新獲取該集合。 (當同一用戶添加,然後讀取集合,這將覆蓋的情況下)

+0

感謝關於ViewScope的提示。至於收藏,我每次都會收到它,但它沒有新的記錄。 – Akshay 2010-07-14 10:09:49