WEB实现分页技术

来源:互联网 发布:hello语音聊天软件 编辑:程序博客网 时间:2024/05/12 12:16

1>思路

页面----》servlet---》service---》dao

页面传递给servlet参数:pageCode (当前页码)

servlet获取到pageCode,在传递给service的queryByPage()方法,最终servlet把PageBean(封装了页面的各个属性)传递给页面

service通过dao中的count()获取到totalRecord(总记录数)

service通过pageSize和pageCode来计算offset和len,调用dao的queryByPage(),得到当前页的记录

2> PageBean

public class PageBean<T> {
//servlet从页面获取,页面没传就为1;
private int pageCode;//当前页码
//private int totalPage;//总页数
//在service中通过dao来获取,pageCode, pageSize
private List<T> datas; //当前页的记录
//在service中通过dao中count()方法来获取
private int totalRecord;//总记录数
//不用动固定值
private int pageSize = 12;//每页记录数
public PageBean(){};
public PageBean(int pageCode, int totalRecord){
this(pageCode, totalRecord, 10);
}
public PageBean(int pageCode, int totalRecord, int pageSize){
this.pageCode = pageCode;
this.totalRecord = totalRecord;
this.pageSize = pageSize;
}
public int getPageCode() {
return pageCode;
}
public void setPageCode(int pageCode) {
this.pageCode = pageCode;
}
public List<T> getDatas() {
return datas;
}
public void setDatas(List<T> datas) {
this.datas = datas;
}
public int getTotalRecord() {
return totalRecord;
}
public void setTotalRecord(int totalRecord) {
this.totalRecord = totalRecord;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getTotalPage() {
//计算totalPage
int totalPage = this.totalRecord / pageSize;
totalPage = totalRecord % pageSize == 0 ? totalPage : totalPage + 1;
return totalPage; 
}
}

2》dao中方法

//查询总记录数
public int count(){
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
int number = 0;
try {
conn = JdbcUtils.getConnection();
String sql = "select count(*) from criculate";
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
while(rs.next()){
 number = rs.getInt("count(*)");
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
JdbcUtils.free(rs, ps, conn);
}

//分页查询
public List<Criculate> queryByPage(int offset, int len){
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
List<Criculate>  list = new ArrayList<Criculate> ();
try {
conn = JdbcUtils.getConnection();
String sql = "select * from criculate limit ?,?";
ps = conn.prepareStatement(sql);
ps.setInt(1, offset);
ps.setInt(2, len);
rs = ps.executeQuery();
while(rs.next()){
Criculate criculate = new Criculate();
criculate.setQyname(rs.getString("qyname"));
criculate.setId(rs.getInt("id"));
criculate.setQycode(rs.getString("qycode"));
criculate.setJyaddress(rs.getString("jyaddress"));
criculate.setPhone(rs.getString("phone"));
list.add(criculate);
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
JdbcUtils.free(rs, ps, conn);
}
return list;
}

3》service

//查询总记录数
public int count(){
return criculateDao.count();
}

//分页查询
public PageBean<Criculate> queryByPage(int pageCode){
int totalRecord = criculateDao.count();
//使用当前页码和总记录数创建PageBean
PageBean<Criculate> pb = new PageBean<Criculate>(pageCode, totalRecord);
// 查询本页记录
List<Criculate> datas = criculateDao.queryByPage((pageCode - 1)*pb.getPageSize(), pb.getPageSize());
//保存pageBean中
pb.setDatas(datas);
return pb;
}

4》servlet

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8"); 
response.setCharacterEncoding("text/html;charset=utf-8");
//List<Criculate> list = criculateService.find();
//request.setAttribute("list", list);

/*
* 1.获取pageCode参数,如果不存在,等于1,如果存在,赋值即可
* 2.通过pageCode来调用service的queryByPage得到pageBean
* 3.把pageBean保存到request中
* 4.转发到criculateFind1.jsp中
*/
int pageCode = 1;
String str = request.getParameter("pageCode");
if(str != null && !str.trim().isEmpty()){
pageCode = Integer.parseInt(str);
}
PageBean<Criculate> pb = criculateService.queryByPage(pageCode);
request.setAttribute("pb", pb);
request.getRequestDispatcher("/pages/tables/criculateFind1.jsp").forward(request, response);
}

5》Web

第${pb.pageCode }页/共${pb.totalPage }页
                  <a href="${pageContext.request.contextPath }/CriculateFindServlet">首页</a>
                  <c:if test="${pb.pageCode > 1}">
                  <a href="${pageContext.request.contextPath }/CriculateFindServlet?pageCode=${pb.pageCode-1}">上一页</a>
                  </c:if>
                 
                  <c:set var="begin" value="1"/>
                  <c:set var="end" value="10"/>
                  <c:choose>
                  <c:when test="${pb.totalPage <= 10}">
                  <c:set var="begin" value="1"/>
                  <c:set var="end" value="${pb.totalPage}"/>
                  </c:when>
                  <c:otherwise>
                    <c:choose>
                  <c:when test="${pb.pageCode - 4 < 1}">
                  <c:set var="begin" value="1"/>
                  <c:set var="end" value="10"/>
                  </c:when>
                  <c:when test="${pb.pageCode + 5 > pb.totalPage}">
                  <c:set var="begin" value="${pb.totalPage - 9}"/>
                  <c:set var="end" value="${pb.totalPage}"/>
                  </c:when>
                  <c:otherwise>
                  <c:set var="begin" value="${pb.pageCode - 4}"/>
                  <c:set var="end" value="${pb.pageCode + 5}"/>
                  </c:otherwise>
                  </c:choose>
                  </c:otherwise>
                  </c:choose>
                  <c:forEach begin="${begin}" end="${end}" var="i">
                  <c:choose>
                  <c:when test="${pb.pageCode eq i }">${i}</c:when>
                  <c:otherwise>
                  <a href="${pageContext.request.contextPath }/CriculateFindServlet?pageCode=${i}">[${i }]</a>
                  </c:otherwise>
                  </c:choose>
                  </c:forEach>
                 
                  <c:if test="${pb.pageCode < pb.totalPage}">
                  <a href="${pageContext.request.contextPath }/CriculateFindServlet?pageCode=${pb.pageCode+1}">下一页</a>
                  </c:if>
                  <a href="${pageContext.request.contextPath }/CriculateFindServlet?pageCode=${pb.totalPage }">尾页</a>
                  <select name="pageCode" onchange="_go(this)">
                  <c:forEach begin="1" end="${pb.totalPage}" var="i">
                  <option value="${i }" <c:if test="${pb.pageCode eq i }">selected='selected'</c:if>>${i }</option>
                  </c:forEach>
                  </select>

<script type="text/javascript">
  function _go(select){
  var index = select.selectedIndex;//选中的option的下标
  var option = select.options[index];//通过下标得到option对象
  var value = option.value;//通过option元素值得到value值
  location="${pageContext.request.contextPath}/CriculateFindServlet?pageCode=" + value;
  }
  </script>

0 0
原创粉丝点击