2010-07-14 7 views
2

간단한 CRUD 응용 프로그램을 만들기 위해 Java EE6 및 JSF를 사용하고 있습니다.Jsf 페이지에 새로 추가 된 값이 표시되지 않습니다.

많은 JSF 페이지에서 사용자가 기존 항목을 선택하기위한 selectOneMenu가 있습니다. 예를 들어, 사용자가 "Exam"을 추가하면 일대 다 관계가 있기 때문에 콤보 상자에서 "Department"를 선택할 수 있습니다.

문제는 새 부서를 추가 할 때마다 세션 시간이 초과 될 때까지 콤보 상자 값이 업데이트되지 않는다는 것입니다. SessionScoped backing beans를 사용해야한다. 왜냐하면 값이 여러 요청에 걸쳐 유지되어야하기 때문이다. 여기

내가 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

EDIT 2 (동일한 사용자가 컬렉션을 추가하고 읽을 때이 사건을 다룰 것입니다) 예상했다. 나는 컬렉션을 업데이트해야한다고 생각했습니다. 아마도 그것은 이 아닐까요?

개체 컬렉션은 데이터베이스와 다시 동기화 될 때만 업데이트됩니다. 명시 적으로 데이터베이스와 다시 동기화하지 않으면 업데이트되지 않습니다.

세션의 개체는 값의 복사본을 가지므로 실제로 무엇인가 언급하지 않으면 데이터베이스로 돌아갈 필요가 없습니다.

3

일반적으로 이러한 경우에 세션 범위 Bean을 사용하는 것은 좋지 않습니다. 콩을 @ViewScoped으로 만드십시오.

또한 항목을 추가 할 때마다 컬렉션을 다시 가져옵니다. 대신 컬렉션을 사용, 나는 지금 명명 된 쿼리 를 사용하고, 그것은 으로 새 레코드를 가져옵니다 :

+0

ViewScope에 대한 정보를 제공해 주셔서 감사합니다. 컬렉션에 대해서는 매번 가져 오지만 새 레코드가 없습니다. – Akshay

관련 문제