2012-03-16 2 views
2

검색 결과를 표시하기 위해 정렬, 페이지 매김 및 LazyDataModel과 함께 Primefaces 데이터 테이블 구성 요소를 사용하고 있습니다. 검색 페이지의 백킹 빈은 ViewScoped입니다.페이징 및 정렬 및 브라우저 백으로 JSF 데이터 테이블

검색 결과 목록에서 사용자는 세부 정보를보기 위해 결과 항목을 선택할 수 있습니다. 이는 새 페이지 요청으로 구현됩니다 (예 : <h:link value="Show Details" outcome="showDetails?id=11234"/>. 브라우저의 뒤로 버튼을 클릭하면 사용자가 검색 결과 목록으로 다시 이동합니다.

문제는 데이터 테이블이 다시 초기 상태가되므로 마지막으로 선택한 정렬 순서와 페이지가 표시되지 않는다는 것입니다. 대부분의 브라우저에서는 Firefox 11만이 캐시에 DOM 변경 사항을 유지하는 것으로 보입니다. IE도 Chrome도 아닙니다.

아무도이 문제를 처리하는 좋은 접근 방법을 가지고 있습니까? 우리는 실제로 "ajaxified"분류와 페이징을 필요로하지 않습니다. 우리는 ViewParams를 통해 모든 것을 처리하는 것을 선호하지만, 이것은 프라임면에 의해 지원되지 않는 것 같습니다.

답변

1

필자도 이와 관련하여 필자는 도움이 될 수있는 코딩 패턴을 개발했습니다. JSF 2에서 북 마크 가능 링크를 사용하는 기술에 대한 자세한 내용은 PrimeFaces가 아닙니다.

마크 업에서 나는 페이지의 모든 매개 변수를 다음과 같이 포함합니다 :

 <f:metadata> 
      <f:viewParam name="orderID" value="#{bean.orderID}" /> 
      <f:viewParam name="sortMode" value="#{bean.sortMode}" /> 
      <f:viewParam name="firstRecord" value="#{bean.firstRecord}" /> 
      <f:viewParam name="pageSize" value="#{bean.pageSize}" /> 
     </f:metadata> 

값이 설정되지 않은 경우 적절한 기본 값을 생성하도록 해당 값이 백업 빈에 백업됩니다.

이제 사용자가 그 값을 변경할 컨트롤을 구현하고, 테이블을가 변경 될 때마다 다시 생성 예를 들어 다음과 같이

public int getPageSize() { 
    if (pageSize < MIN_PAGE_SIZE) pageSize = DEF_PAGE_SIZE; 
    if (pageSize > MAX_PAGE_SIZE) pageSize = DEF_PAGE_SIZE; 
    return pageSize; 
} 

이 볼 수있는 링크가 생성 될 수있다. 당신은 아직도 그것을 위해 AJAX를 사용한다 - 예를 들면 다음과 같습니다 setter 메소드에서

<p:spinner value=#{bean.pageSize} > 
    <p:ajax update="tableID" /> 
</p:spinner> 

을, 테이블의 재생성을 트리거해야하지만 그것의 요점입니다. 이게 도움이 되길 바란다.

UPDATE : 당신에게 등

<h:link value="First Page" outcome="thisPage"> 
     <f:param name="orderID" value="#{bean.orderID}" /> 
     <f:param name="sortMode" value="#{bean.sortMode}" /> 
     <f:param name="firstRecord" value="0" /> 
     <f:param name="pageSize" value="#{bean.pageSize}" /> 
</h:link> 
<h:link value="Next Page" outcome="thisPage"> 
     <f:param name="orderID" value="#{bean.orderID}" /> 
     <f:param name="sortMode" value="#{bean.sortMode}" /> 
     <f:param name="firstRecord" value="#{bean.nextRecord}" /> 
     <f:param name="pageSize" value="#{bean.pageSize}" /> 
</h:link> 

: 링크는 다음과 같이 보일 것입니다

가 페이지 매김을 처리하기 위해, 당신은 단순히 등 첫 페이지, 이전 페이지, 다음 페이지에 대한 링크를 추가해야 백킹 빈에 속성을 구현하여 firstRecord 매개 변수를 계산해야합니다.

+0

thx, 예, 뷰 매개 변수로 페이지 및 정렬 매개 변수를 사용하면 내가 아약스보다 선호합니다. 하지만 제 질문은 primefaces에서 layz로드 데이트를 사용하여이 접근법으로 페이지 매김과 정렬을 처리하는 방법에 관한 것입니다. – fischermatte

+0

@fischermatte는 업데이트를 참조하십시오. – AlanObject

+0

여전히 - 당신이 ajax 요청을 수행해서는 안되지만이 매개 변수로 새로운 페이지 요청을 호출해야한다는 것을 primefaces datatable의 paginator와 sorting 버튼에 어떻게 알리십니까? 거기에 내가 볼 수있는 유일한 솔루션은 정렬 및 페이지 매김을 사용하여 자신의 datatable 구성 요소를 작성하는 것입니다. 그러나 나는이 문제를 가진 첫 번째 사람인지 정말 궁금합니다. 내 관점에서 볼 때 이것은 컴포넌트 프레임 워크에 의해 처리되어야하는 기능입니다. – fischermatte

관련 문제