簡體   English   中英

尋找一個Play Framework分頁示例

[英]Looking for a Play Framework pagination example

我正在尋找一個Play Framework分頁示例。 請給我一個很好的參考鏈接。

我搜索了它,沒有Java代碼。

我將提供一個Scala解決方案,您可以調整代碼。

您可以創建一個名為Paginator的實用程序類:

package util

case class Paginator[A](items: Seq[A], page: Int, offset: Long, total: Long) {
  lazy private val pageSize: Int = 20 // you can adjust to your preference
  lazy val prevPage: Option[Int] = Option(page - 1).filter(_ >= 0)
  lazy val nextPage: Option[Int] = Option(page + 1).filter(_ => (offset + items.size) < total)
  lazy val numberOfPages: Float = if (total % pageSize > 0) { total / pageSize + 1 }
                                  else { total / pageSize }
}

在您的控制器中,您將執行以下操作:

def list(currentPage: Int) = Action.async { implicit request =>
  val offset: Int = currentPage * resultsPerPage

  // Put your logic here to get the `listOfItems` you want to display
  // and the number of `totalItems`

  // and then return Ok and call your view
  Ok(views.html.list(Paginator(listOfItems, currentPage, offset, totalItems)))
}

最后,在您看來,您將獲得以下內容:

@import util.Paginator

@(paginatedList: Paginator[Item])(implicit msg: play.api.i18n.MessagesProvider)

@main(msg.messages("label.list_of_items")) {
  <h1>@msg.messages("label.paginated_list")</h1>

  @* populate your list here *@

  @* and this is your paginator *@
  <div class="pagination">
    @paginatedList.prevPage.map { page =>
      <a href="@link(page)">@msg.messages("label.previous")<a>
    }.get
    @for(pageNumber <- 1 to paginatedList.numberOfPages.toInt) {
      <a href="@routes.Controller.list(pageNumber - 1)">@pageNumber</a>
    }
    @paginatedList.nextPage.map { page =>
      <a href="@link(page)">@msg.messages("label.next")</a>
    }.get
  </div>
}

我從這個項目中得到了最初的想法,並且對此進行了擴展。 您還可以通過使用getOrElse改進分頁器,以在首頁/末頁時提供替代/禁用的鏈接,或禁用當前的頁碼等。

我希望這有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM