java play Framework pagination/pager를 붙이는 방법

play2.4.6에서
index(Item 일람) 페이지에 pagination을 붙여 봅니다

conf/routes


GET     /item/index                 controllers.ItemController.index(page: Integer = 1)
GET     /item/index/:page           controllers.ItemController.index(page: Integer)


페이지를 지정하지 않은 경우 첫 페이지에
page를 지정하고 있었을 경우는 그 페이지에 가도록(듯이) 한다.

app/controllers/ItemController.java


public Result index(int page) throws Exception{
        PagedList<Item> pagedList= ItemService.getPagedList(page);
        List<Item> items = pagedList.getList();
        int maxPage = pagedList.getTotalPageCount();

        return ok(views.html.item.index.render(items, page, maxPage));
    }

int page는 표시할 페이지입니다.
PagedList pagedList= ItemService.getPagedList(page);
List items = pagedList.getList();
해당 페이지에 표시할 항목 목록을 가져옵니다.
getTotalPageCount() 는 마지막 페이지가 몇 페이지인가를 내려주기 때문에
그것을 int maxPage에 넣습니다.

app/models/service/ItemService.java


public static final PagedList<Item> getPagedList(int page){
        Item item= new item();
        return item.getPagedList(page);
    }

item.getPagedList로.

app/models/entity/Item.java


public PagedList<Item> getPagedList(int page) {

       int pageSize = 10;
        int pageIndex = page - 1;
        PagedList<Item> pegedList = Item.find.findPagedList(pageIndex, pageSize)
        return pegedList;
    }

int pageSize는 한 페이지에 표시할 항목의 수입니다.
int pageIndex는 표시할 페이지입니다.
findPagedList(pageIndex, pageSize)의 pageIndex는 0이 1페이지째이므로
-1 한 것을 넣는다.

이제 pegedList에 해당 페이지에 표시되는 Item 목록이 포함됩니다.

app/views/item/index.scala.html


@(items: List[models.entity.Item], currentPage: Int, maxPage: Int)
@main() {
    <div id="main">
    <ol class="breadcrumb">
        <li class="active">アイテム一覧</li>
    </ol>
        <div class="list-group">
            <p class="list-group-item list-group-item-info">
              アイテム
            </p>
            @for((item) <- items){
            <a href="/item/edit/@item.id" class="list-group-item">
            @item.name</br>
             </a>
            }
            @pagination(currentPage, maxPage)
        </div>
    </div>
}

view의 인수는
items(그 페이지에 표시하는 item의 리스트)
currentPage(표시할 페이지)
maxPage(마지막 페이지).

item을 표시한 후
@pagination (currentPage, maxPage)에서
app/views/item/pagination.scala.html을 호출합니다.

전화 방법에 대한 자세한 내용은 여기

app/views/item/pagination.scala.html


@(currentPage: Integer, maxPage: Integer)

<div>
  <ul class="pagination">
        @if(currentPage == 1) {
            <li class="disabled"><span>&laquo;</span></li>
        } else {
            <li><a href="@controllers.routes.ItemController.index(currentPage - 1)">&laquo;</a></li>
        }

        @for(index <- 1 to maxPage) {
            @if(currentPage == index) {
                <li class="disabled"><span>@index</span></li>
            } else {
                <li><a href="@controllers.routes.ItemController.index(index)">@index</a></li>
            }
        }

        @if(currentPage == maxPage) {
            <li class="disabled"><span>&raquo;</span></li>
        } else {
            <li><a href="@controllers.routes.ItemController.index(currentPage + 1)">&raquo;</a></li>
        }
    </ul>
</div>

pagination의 부분.
max로 1페이지밖에 없으면 <<는 누르지 않게 한다.
페이지만을 반복하여 현재 페이지 수만 숫자를 누를 수 없게 한다.
현재 페이지가 max(마지막 페이지)이면 >>는 누르지 않도록 한다.

이상

좋은 웹페이지 즐겨찾기