N.1 简介javascript
使用Pagers标签库能够实现分页功能。html
N.2 用法java
JSP中动态生成表格的代码通常以下所示:框架
<table> <% for(int i = 0; i < 行数; i++) { %> <tr> <td>内容</td> </tr> <% } %> </table>
在本章中我使用pg做为Pager标签库的前缀。less
若是要使用Pager标签库进行分页处理的话,须要使用<pg:pager>标签将<table>包括在内,而后在内部使用一系列的Pager标签表示上一页、下一页等控制按钮。经常使用的控制标签以下表所示:post
标签 说明url
pager 主标签,包括整个动态表格spa
first 第一页code
skip 页面跳转orm
prev 上一页
pages 页码
next 下一页
last 最后一页
下面是一个例子,源代码以下所示:
<% Vector<String[]> v = (Vector<String[]>)request.getAttribute("table_list"); int maxPageItems = 25; String url = "/INtools/Db/ListTable.action"; int item_count = v.size(); int page_count = item_count % maxPageItems == 0 ? item_count / maxPageItems : item_count / maxPageItems + 1; %> <form id="form1" name="form1" method="post" action=""> <pg:pager items="<%= item_count %>" url="<%= url %>" index="center" maxPageItems="<%= maxPageItems %>" maxIndexPages="10" isOffset="true" export="offset,currentPageNumber=pageNumber" scope="request"> <table border="1" cellspacing="0" cellpadding="3" bordercolordark="#ffffff" bordercolorlight="#000066" width='100%' bgcolor="#76a6c7"> <tr class="table_desc"> <td colspan="3">后台表集合</td> </tr> <tr class="table_title"> <td width="33%">表名</td> <td width="33%">所属模块</td> <td width="34%">操做</td> </tr> <% for(int iRow = offset.intValue(), l = Math.min(iRow + maxPageItems, v.size()); iRow < l; iRow++) { String[] row_data = v.get(iRow); String table_name = row_data[0]; String module_name = row_data[1]; String table_id = row_data[2]; String bgcolor = iRow % 2 == 0 ? "#f4fbff" : "#FFFFDD"; %> <pg:item> <tr bgcolor="<%=bgcolor%>" class="table_data"> <td align="left"><%=table_name%></td> <td align="left"><%=module_name%></td> <td align="center"> <input type="button" value="修改" /> <input type="button" value="删除" /> </td> </tr> </pg:item> <% } %> <tr class="table_page_break"> <td colspan="3"> 记录数: <%= item_count %> 页数:<%= page_count %> <pg:first export="firstPageUrl=pageUrl" unless="current"> <a href="<%= firstPageUrl %>">|<</a> </pg:first> <pg:skip export="skipBackPageUrl=pageUrl" pages="<%= -10 %>"> <a href="<%= skipBackPageUrl %>"><<<</a> </pg:skip> <pg:prev export="prevPageUrl=pageUrl"> <a href="<%= prevPageUrl %>"><<</a> </pg:prev> <pg:pages><% if (pageNumber == currentPageNumber) { %> <b><%= pageNumber %></b> <% } else { %> <a href="<%= pageUrl %>"><%= pageNumber %></a> <% } %></pg:pages> <pg:next export="nextPageUrl=pageUrl"> <a href="<%= nextPageUrl %>">>></a> </pg:next> <pg:skip export="skipForwardPageUrl=pageUrl" pages="<%= 10 %>"> <a href="<%= skipForwardPageUrl %>">>>></a> </pg:skip> <pg:last export="lastPageUrl=pageUrl" unless="current"> <a href="<%= lastPageUrl %>">>|</a> </pg:last> <input type="text" size="4" name="page_no" id="page_no" /> <input type="button" value="go" onclick="goto_page_no()" /> </td> </tr> <tr class="table_button_row"> <td colspan="3"> <input type="button" value="肯定" class="form_button" /> </td> </tr> </table> </pg:pager> </form> <script type="text/javascript"> function goto_page_no() { var em_page_no = document.all["page_no"]; var page_no = parseInt(em_page_no.value); var offset = <%= maxPageItems %> * (page_no - 1); document.location.href = "<%= url %>?pager.offset=" + offset; } </script>
分页效果以下图所示:
获取数据
该段代码用于获取显示的页面数据,在此作了以下设定,取得的显示数据的格式为Vector<String[]>,每页显示25行记录,获取页数据时须要从新执行查询,其处理操做为/INtools/Db/ListTable.action,这里我使用了struts框架,这表示一个servlet处理类,也能够是一个JSP文件。并进行了页数计算。
pager标签
items:表示记录数
url:表示获取数据时的处理程序
index:页码的显示方式,能够为center、forward、half-full
maxPageItems:每页显示的记录数
maxIndexPages:显示的页码数
isOffset;
export:将pager标签支持的变量导出,
N.3 技巧
若是要实现以下功能:
指定跳转到某页
生成分页内容时须要参数TableName
可写入以下代码:
<form id="form1" name="form1" method="get" action="..."> ... <pg:param name="TableName" value="<%= search_table_name %>" /> <input type="hidden" name="TableName" id="TableName" value="<%= search_table_name %>" /> <input type="hidden" name="pager.offset" /> <input type="button" value="go" onclick="goto_page_no()" /> ... </form>
<script type="text/javascript"> function goto_page_no() { var offset = 记录偏移值; var frm = document.form1; frm.elements["pager.offset"].value = offset; frm.submit(); } </script>
其中<pg:param>是用于点击页码翻页时提供查询参数,若是打开生成后的源代码,会发现全部的翻页标记(<a>)都加了一个参数TableName,而<input type="hidden" name="TableName" />则用于指定跳转页时提供查询参数,<input type="hidden" name="pager.offset" />则用于提供指定跳转页时的记录偏移量,其名称格式为“[pager].[pg:pager标签的export属性中的offset表示法]”。
值得注意的是,此处的<form>须要使用“get”方式,若是使用“post”方式,使用跳转按钮提交的“TableName”参数会翻倍,例如,第一次为“a”,第二次则为“a,a”。