2014-11-03 2 views
1

내 응용 프로그램의 데이터 테이블에서 지연로드를 사용하고 싶습니다. Primefaces 쇼케이스 웹 사이트 (예 : http://www.primefaces.org/showcase/ui/data/datatable/lazy.xhtml)에서 예제를 탐색했습니다. 그러나 이것이 어떻게 게으른 로딩의 예인지 이해하지 못합니다.게으른 로딩 쇼케이스 프라임

응용 프로그램이 페이지를 처음로드 할 때 그는 여전히 200 대의 자동차를 얻습니다. 나는 앱이이 페이지를 처음으로로드 할 때 첫 페이지에 행이있을 때만 많은 수의 항목을로드 한 다음 사용자가 클릭 할 때 (이 경우 앱에서 지연로드를 구현하려는 경우) 다음 x 항목이로드되는 두 번째 페이지 등등.

거대한 데이터 테이블 (100 만 개가 넘는 레코드)이 있기 때문에 백만 레코드를로드하고 싶지는 않으며 처음 20 개 레코드 만 필요하면 5 분을 기다려야합니다.

EDIT : 더 나쁜 것은 내가보기 좋게 보이는 스프링 백킹 빈을 사용할 때마다 사용자가 다른 페이지로 전환 할 때마다 모든 레코드를로드한다는 것을 알게되었습니다. 이런 방식으로 게으름로드하지 않고도 데이터 테이블을 사용하면 도움이 될 것입니다.

답변

0

이 예제는 어떻게 작동하는지 보여줍니다.

public List<?> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String,Object> filters)

이것은 당신이 확장해야하는 LazyDataModel 클래스의 일부이다 : 그것은 방법을 구현하기 위해 자신에게 달려 있습니다.

페이지에 필요한 레코드 만 가져 오는 방식 (즉, first부터 first+pageSize까지의 모든 레코드)으로이 메서드를 구현하면 적절한 지연로드가 발생합니다. 쇼케이스에는 사용할 수있는 데이터베이스 구현 예제가 없습니다.

+0

그러나 쇼케이스의 예제는 느리게로드 된 데이터 테이블에 어떤 영향을 줍니까? 왜 그들은 실제로 게으른 로딩인지 모르는 예제를 보여주지 않았습니까? service.createCars (200)는 여전히 20 대신에 200 대의 자동차를 생성했습니다. –

+3

프런트 엔드가 지연로드 및 페이지 매김을 통해 올바르게 작동하는 방법을 보여줍니다. 페이지 매김을 표시하기 위해 일종의 데이터 소스가 필요하기 때문에 자동차 풀을 만들어야합니다. 어쩌면 이것이 그들의 측면에서 가장 좋은 예가 아닐지도 모릅니다. 예를 들어 조금만 더 좋았을 수도 있습니다. 애플리케이션 범위의 bean (데이터베이스와 같은 역할을 함)에 모든 자동차를 넣은 다음 뷰가있는 bean에서 자동차 목록을 초기화하는 대신 해당 bean에 대해 쿼리하십시오. – ChristopherS