2010-05-18 4 views
0

레코드 목록이 10,000이고, 데이터 테이블을 사용 중이며 페이징 (디스플레이 당 10 레코드)을 사용하고있는 상황이 있습니다. , 내가 내가로 이동 페이징 버튼을 클릭 whene 이제 문제는JSF 세션 문제

public List<MyClass> getMyList() { 
    if(mylist== null){ 

     mylist= (List<MyClass>) FacesContext......getSessionMap().get("mylist"); 
    } 

    return mylist; 
} 

facesContext........put("mylist", mylist); 

그리고 myList에의 게터에 : 나는 같은 세션에서 그 목록을 넣어 넣고 싶어 두 번째 페이지는 첫 번째 레코드 만 표시됩니다. 몇 가지 사항이 누락되었습니다. 몇 가지 질문이 있습니다.

세션을 올바르게 입력하는 방법입니다. 내 경우에 목록에 전화해야하는 방식입니다. 사전에

Thnaks는 ... 완전히 다른

+0

JSF 코드를 볼 수 있습니까? 페이징이 어떻게 구현되는지 알아야합니다. – Naganalf

답변

1

뭔가 : 난 강력하게 하지에게 추천 세션 범위에 그 10.000 기록했습니다. 그것은 비효율적입니다. 100 명의 사용자가 귀하의 데이터 테이블을 방문한다면, 그 레코드는 모든 사용자를 위해 메모리에 복제 될 것입니다. 이것은 말이되지 않습니다. 데이터베이스에 남겨두고 결과에 따라 정확히 표시 할 행을 반환하는 SQL 쿼리를 작성하십시오.. 그것은 DB가 설계된 작업입니다. 데이터 모델이 잘 설계된 경우 (WHERE에 포함 된 열의 인덱스 및 필요한 경우 ORDER BY 절), 각 테이블에 대한 Java의 메모리에서 전체 테이블을 이동하는 것보다 확실히 빠릅니다.

더 많은 정보와 코드 예제는 this article에서 찾을 수 있습니다.

+0

Thks Balusc, 또 하나의 질문입니다. 데이터베이스에서 가져올 행의 수를 50 개로 제한한다고해도 말입니다. 또한 최대 사용자 수가 10 명 미만이라고 말할 수 있습니다. 페이지 매김, 즉 페이지 당 10 개의 레코드를 사용하는 경우 다음 페이징 버튼을 클릭하면 목록이 비어 있습니다. 어떻게 이것을 극복합니까? TOMAHAWK의 속성을 구현할 수 없습니다. 감사합니다. – user234194

+0

그런 다음 어쨌든 구현할 수 있도록 구현할 수 없기 때문에 문제가 해결되거나 * 세션 범위에 빈을 배치하십시오. 유일한주의 사항은 동일한 세션의 모든 탭/창을 반영한다는 것입니다. 이것은 어떤 경우에는 막 다른 길일 수 있습니다. – BalusC