寻找 Play Framework 分页示例
Looking for a Play Framework pagination example
我正在寻找 Play Framework 分页示例。请帮我提供一个好的参考 link.
我搜索了一下,没有java代码。
我会提供一个Scala解决方案,你可以调整你的代码。
您可以创建一个名为 Paginator
:
的实用程序 class
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>
}
我从这个 project 中得到了最初的想法,并对其进行了扩展。您还可以通过使用 getOrElse
改进分页器,在 first/last 页面上提供 alternative/disabled 链接,或禁用当前页码等
希望对您有所帮助。
我正在寻找 Play Framework 分页示例。请帮我提供一个好的参考 link.
我搜索了一下,没有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>
}
我从这个 project 中得到了最初的想法,并对其进行了扩展。您还可以通过使用 getOrElse
改进分页器,在 first/last 页面上提供 alternative/disabled 链接,或禁用当前页码等
希望对您有所帮助。