分頁
真分頁
使用特定的sql語句,條件查詢出指定內(nèi)容假分頁
數(shù)據(jù)全部取出,在頁面分頁顯示分頁數(shù)據(jù)
pageSize maxResults每頁大小 頁面(用戶提供或默認(rèn)值)提供
itemCount總記錄數(shù) 數(shù)據(jù)庫
offset firstResult當(dāng)前頁第一條的編號 當(dāng)前顯示第幾頁(用戶) 計算
pageCount總頁數(shù) 計算
總頁數(shù) = (總記錄數(shù)+每頁大小 - 1 )/ 每頁大小
當(dāng)前頁第一條的編號 = (當(dāng)前頁編號 - 1) * 每頁大小
- 分頁完成步驟
hibernate能分頁
拷貝PageInfo daoimp增加byPage方法 byPage和getAll方法的區(qū)別在與要設(shè)置max和first,要查詢總數(shù)頁面輸出能分頁
action調(diào)用分頁查詢的方法,由于分頁參數(shù)是頁面提供,所以pageInfo 設(shè)置為action的成員變量,getter setter
list頁面調(diào)用分頁的方法
瀏覽器地址 輸入list.jsp?pageInfo.firstResult=15&pageInfo.maxResults=5使用自定義分頁標(biāo)簽?zāi)芊猪?br> 拷貝分頁標(biāo)簽類 和 分頁標(biāo)簽的tld文件 tld文件放在web-inf 檢查tld文件中類的路徑名稱是否匹配
list頁面 添加自定義標(biāo)簽的引入
<%@ taglib prefix="paging" uri="/WEB-INF/paging.tld" %>
記得設(shè)置base標(biāo)簽
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<s:action name="courseAction_getAllCourse" executeResult="false"
namespace="/" />
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<base href="<%=basePath%>" />
拷貝標(biāo)簽的調(diào)用
<tr>
<td colspan="8">
<paging:paging
href="student/list.jsp"
itemCount="{pageInfo.firstResult}"
maxResults="${pageInfo.maxResults}"/>
</td></tr>
PageInfo.java:
package repairsystem.page;
import java.io.Serializable;
public class PageInfo implements Serializable {
private static final long serialVersionUID = 1878154374135400744L;
private int firstResult = 0;//當(dāng)前頁第一條編號
private int maxResults = 5;//每頁大小
private int pageCount = 0;//總頁數(shù)
private transient int itemCount = 0;//總記錄數(shù)
public boolean isPage = false;
public int getFirstResult() {
return firstResult;
}
public void setFirstResult(int firstResult) {
this.firstResult = firstResult;
}
public int getMaxResults() {
return maxResults;
}
public void setMaxResults(int maxResults) {
this.maxResults = maxResults;
}
public int getPageCount() {
return pageCount;
}
public void setPageCount(int pageCount) {
this.pageCount = pageCount;
}
public boolean isPage() {
return isPage;
}
public void setPage(boolean isPage) {
this.isPage = isPage;
}
public int getItemCount() {
return itemCount;
}
public void setItemCount(int itemCount) {
this.itemCount = itemCount;
this.pageCount = (itemCount + maxResults - 1) / maxResults;
}
}
PagingTag.java:
package repairsystem.page;
import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;
/**
* @author vikings
*
*/
public class PagingTag extends TagSupport{
private static final long serialVersionUID = 1L;
private int maxResults = 5;
private int firstResult=0;
private int itemCount = 0;
private String href = null;
public int getMaxResults() {
return maxResults;
}
public void setMaxResults(int maxResults) {
this.maxResults = maxResults;
}
public int getFirstResult() {
return firstResult;
}
public void setFirstResult(int firstResult) {
this.firstResult = firstResult;
}
public int getItemCount() {
return itemCount;
}
public void setItemCount(int itemCount) {
this.itemCount = itemCount;
}
public String getHref() {
return href;
}
public void setHref(String href) {
this.href = href;
}
public int doStartTag() throws JspException
{
return SKIP_BODY;
}
public int doEndTag() throws JspException
{
int totalPages = 0;
int currentPage=0;
totalPages = itemCount / maxResults;
if(itemCount==0||maxResults==0){
return EVAL_PAGE;
}
if (itemCount % maxResults != 0) {
totalPages = totalPages + 1;
}
if (totalPages<=1)
{
return EVAL_PAGE;
}
currentPage = (firstResult) / maxResults;
currentPage = currentPage+1;
StringBuffer navigation = new StringBuffer();
navigation.append("<li><a>第"+currentPage+"頁/共"+totalPages+"頁</a></li>");
if (currentPage<=1){
navigation.append("<li><a>首頁</a></li>");
navigation.append("<li><a>上一頁</a></li>");
} else {
navigation.append("<li><a href='"+href+"?pageInfo.firstResult=0&pageInfo.maxResults="+maxResults+"&pageInfo.isPage=true'>首頁</a></li>");
navigation.append(" ");
navigation.append("<li><a href='"+href+"?pageInfo.firstResult="+(firstResult-maxResults)+"&pageInfo.maxResults="+maxResults+"&pageInfo.isPage=true'>上一頁</a></li>");
}
navigation.append(" ");
if (currentPage>=totalPages){
navigation.append("<li><a>下一頁</a></li>");
navigation.append(" ");
navigation.append("<li><a>尾頁</a></li>");
}else {
navigation.append("<li><a href='"+href+"?pageInfo.firstResult="+(firstResult+maxResults)+"&pageInfo.maxResults="+maxResults+"&pageInfo.isPage=true'>下一頁</a></li>");
navigation.append(" ");
navigation.append("<li><a href='"+href+"?pageInfo.firstResult="+((totalPages-1)*maxResults)+"&pageInfo.maxResults="+maxResults+"&pageInfo.isPage=true'>尾頁 </a></li>");
}
try {
pageContext.getOut().print(navigation.toString());
} catch (IOException e) {
e.printStackTrace();
}
return EVAL_PAGE;
}
public void release()
{
super.release();
this.maxResults = 0; //recordsPerPage
this.firstResult=0; //beginItem
this.itemCount = 0;
this.href = null;
}
}
paging.tld:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN"
"http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
<taglib>
<tlibversion>1.0</tlibversion>
<jspversion>1.1</jspversion>
<shortname>Jsp Tag Library</shortname>
<!-- paging標(biāo)簽,用于顯示一個分頁的公告表格 -->
<tag>
<name>paging</name>
<tagclass>repairsystem.page.PagingTag</tagclass>
<bodycontent>empty</bodycontent>
<attribute>
<name>maxResults</name>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>firstResult</name>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>itemCount</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>href</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>
ServicemanDao.java:
// 分頁查詢
public List<Serviceman> getServicemanByPage(PageInfo pageInfo) {
Query query = session.createQuery("From Serviceman");
List<Serviceman> servicemans = null;
int itemCount = getItemCount();// 查詢總記錄數(shù)
pageInfo.setItemCount(itemCount);
// 總記錄數(shù)大于0,才進(jìn)行分頁
if (itemCount > 0) {
query.setMaxResults(pageInfo.getMaxResults());
query.setFirstResult(pageInfo.getFirstResult());
servicemans = query.list();
}
// HibernateSessionFactory.closeSession();
return servicemans;
}
// 查詢總記錄數(shù)
public int getItemCount() {
Query query = session.createQuery("select count(*) From Serviceman");
int itemCount = Integer.parseInt(query.uniqueResult().toString());
// HibernateSessionFactory.closeSession();
return itemCount;
}
...
ServicemanAction.java:
public class ServicemanAction extends ActionSupport{
/**
*
*/
private static final long serialVersionUID = 1L;
private Serviceman serviceman;
private ServicemanServiceI servicemanServiceI;
private PageInfo pageInfo;
public ServicemanAction() {
super();
servicemanServiceI = new ServicemanService();
pageInfo = new PageInfo();
}
public Serviceman getServiceman() {
return serviceman;
}
public void setServiceman(Serviceman serviceman) {
this.serviceman = serviceman;
}
public ServicemanServiceI getServicemanServiceI() {
return servicemanServiceI;
}
public void setServicemanServiceI(ServicemanServiceI servicemanServiceI) {
this.servicemanServiceI = servicemanServiceI;
}
public PageInfo getPageInfo() {
return pageInfo;
}
public void setPageInfo(PageInfo pageInfo) {
this.pageInfo = pageInfo;
}
// 得到所有維修人員信息
public String getServicemanInfo() throws Exception {
List<Serviceman> servicemans = servicemanServiceI.getServicemanInfo();
ServletActionContext.getRequest().setAttribute("servicemans", servicemans);
return null;
}
// 分頁顯示教師
public String getServicemanByPage() throws Exception {
// action依次調(diào)用service dao后得到結(jié)果,再原路返回結(jié)果到了action,再將結(jié)果轉(zhuǎn)發(fā)給頁面
System.out.println(pageInfo.getFirstResult() + " " + pageInfo.getMaxResults());
List<Serviceman> servicemans = servicemanServiceI.getServicemanByPage(pageInfo);
ServletActionContext.getRequest().setAttribute("servicemans", servicemans);
ServletActionContext.getRequest().setAttribute("pageInfo", pageInfo);
return null;
}
// 根據(jù)主鍵查詢維修人員
public String getServicemanInfoBySid() throws Exception {
Serviceman dbserviceman = servicemanServiceI.getServicemanInfoBySid(serviceman.getSid());
ServletActionContext.getRequest().setAttribute("serviceman", dbserviceman);
// System.out.println(dbteacher.getTname());
return null;
}
// 增加維修人員
public String addServiceman() throws Exception {
Serializable result = servicemanServiceI.addServiceman(serviceman);
return null;
}
// 修改維修人員信息
public String updateServiceman() throws Exception {
Serializable result = servicemanServiceI.updateServiceman(serviceman);
return null;
}
}
serviceman.jsp:
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<%@ taglib prefix="paging" uri="/WEB-INF/paging.tld" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<s:action name="ServicemanAction_getServicemanInfo" executeResult="false"
namespace="/" />
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<base href="<%=basePath%>" />
<title>test</title>
</head>
<body>
<s:action name="ServicemanAction_getServicemanByPage" executeResult="false" namespace="/"/>
<table border="1">
<tr>
<td>維修者id</td>
<td>姓名</td>
<td>電話</td>
<td>密碼</td>
<td>住址</td>
<td>狀態(tài)</td>
<td colspan="4">操作</td>
</tr>
<s:iterator var="serviceman" value="#request.servicemans">
<tr>
<td><s:property value="#serviceman.sid" /></td>
<td><s:property value="#serviceman.sname" /></td>
<td><s:property value="#serviceman.sphone" /></td>
<td><s:property value="#serviceman.spassword" /></td>
<td><s:property value="#serviceman.saddress" /></td>
<td><s:property value="#serviceman.sstatus" /></td>
<td><a href="detail.jsp?sid=${serviceman.sid}">詳情</a></td>
<td><a href="update.jsp?sid=${serviceman.sid}">修改</a></td>
<td>刪除</td>
<td><a href="rob.jsp?sid=${serviceman.sid}">搶單</a></td>
</tr>
</s:iterator>
<tr>
<td><a href="add.jsp">增加</a></td>
</tr>
<tr>
<td colspan="8">
<paging:paging
href="Serviceman/serviceman.jsp"
itemCount="${pageInfo.itemCount}"
firstResult="${pageInfo.firstResult}"
maxResults="${pageInfo.maxResults}"/>
</td>
</tr>
</table>
</body>
</html>