說明
使用YangMVC, 用戶訪問一個url時,這個請求會被映射到控制器類的一個方法上。實現一個數據列表功能時,在控制器中進行數據庫查詢,隨後交給JSP來顯示。
分頁功能是非常常見的功能,而分頁的導航條實現起來比較複雜。如共有1000條數據,每頁顯示10條,當前是第30頁,導航條顯示十個相鄰的頁面的鏈接。 那麼導航條應當顯示什麼? 應該顯示 25 26 27 28 29 的鏈接 , 31 32 33 34 35的鏈接。 那麼如果當前頁時 第3頁呢? 還是顯示十條相鄰鏈接,應該是顯示那些頁的鏈接呢? -2 -1 ? 不能。。 只能往後順延。。
YangMVC提供了一個非常簡便的方式來處理分頁。用戶既不需要關心URL參數,也不需要關心分頁導航條的實現。
控制器的寫法
public class BookController extends Controller {
public void index(){
DBTool tool = Model.tool("book");
LasyList list = tool.all().orderby("id", false);
put("books", page(list));
render();
}
可以看到put一行,list通過page方法包裹,這就實現了分頁。 控制器的修改僅此而已。
默認每頁顯示30條。如果想自定義條數,那麼使用
page(list,10)
這種方式來制定每頁數據個數爲10條。
視圖的寫法
在控制器中使用render來調用對應的默認視圖。 這個BookController的index方法會對應視圖目錄下的book目錄下的index.jsp方法。(給予名字匹配的原則)
這個jsp的核心代碼如下。 在其中加入了${page_data} 來輸出分頁導航條。與沒有分頁的頁面相比,只是加了這個標記而已。
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
(此處省略一堆無關的HTML代碼)
<table class="table table-bordered">
<c:forEach var="b" items="${books }">
<tr>
<td>${b.id }</td>
<td>${b.name }</td>
<td>${b.author }</td>
<td>${b.chaodai }</td>
<td>${b.tm_year }</td>
<td>
<a href='book/edit?id=${b.id}'>編輯</a>
<a href='book/del?id=${b.id}'>刪除</a>
</td>
</tr>
</c:forEach>
</table>
${page_data }