首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

分页的至极

2012-08-09 
分页的极致package cn.itcast.servletday13.business.webimport java.io.IOExceptionimport java.io.Pri

分页的极致

package cn.itcast.servletday13.business.web;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.omg.CosNaming.NamingContextExtPackage.StringNameHelper;import cn.itcast.servletday13.business.domain.PageBean;import cn.itcast.servletday13.business.domain.PageInfo;import cn.itcast.servletday13.business.manager.PageManager;public class PageListServlet extends HttpServlet {/** * The doGet method of the servlet. <br> * * This method is called when a form has its tag value method equals to get. *  * @param request the request send by the client to the server * @param response the response send by the server to the client * @throws ServletException if an error occurred * @throws IOException if an error occurred */public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//这就是MVC,不直接访问通过servelt访问,并且在访问时间把一些东西也转发过去 。PageManager pageManager = new PageManager();PageInfo pageInfo = new PageInfo();String pid = request.getParameter("pid");int currentPage = 1;try {currentPage = Integer.parseInt(pid);} catch (Exception e) {// TODO: handle exception}String pSize = request.getParameter("psize");int pageSize = 10 ;//每页显示默认为10。try {pageSize = Integer.parseInt(pSize);} catch (Exception e) {// TODO: handle exception}pageInfo.setCurrentPage(currentPage);pageInfo.setPageSize(pageSize);System.out.println(pageInfo.getCurrentPage());System.out.println(pageInfo.getPageSize());//写代码先写核心,把最主要的写上,其它都是慢慢添加。下面三句是MVC中最核心的。PageBean pageBean = pageManager.getCurrentPage(pageInfo);request.setAttribute("pageBean",pageBean);request.getRequestDispatcher("/WEB-INF/pageList.jsp").forward(request, response);}}


分页步骤:
根据MVC设计模式 将页面记录放在一个javabean对象里面


javabean对象里面的属性则根据页面显示的效果进行设置


谁来创建javabean对象呢?
大的方面来说是servlet创建的javabean对象,小的方面来说


javabean对象是由servlet调用别的模块,通常是service/manger来


创建的.


dao层专门用来处理数据库


业务逻辑层:service/manager层是dao层的上一层,一般传递参数


给dao层


在该分页案例里:


PageManager的输入和输出:
PageManager使用PageInfo(参数对象)对象输出PageBean对象


PageDao层通过SQL语句查询出结果,把查询出的结果输出到


QueryResult对象里.


   1.先创建


web,business,business.domain,business.manger,business.dao


几个包


   2.在business.domain中创建PageBean.java 完成这个类
根据页面的属性设置PageBean的属性。
PageBean的属性有当前页面数currentPage,总页面数totalPages


,总记录数totalRecoreds,单位页面记录数pageSize,上一页


previousPage,下一页nextPage,是否是第一页firstPage,是否是


最后一页lastPage,页码条数组pageBar,页面记录的集合beanList
完善各个属性对应的setter和getter方法


【】发现问题:当前页面和传入的页面可能发生错误,如只有10页,


却传入了20页,这时就应该把currentPage放在manager里进行处理


.又发现上一页和下一页不需要定义这个属性,可以直接在


getPreviousPage()里设定.


getPageBar()方法:
先设置一个final类型的static的常量PAGEBARSIZE,


定义数组开始时的数字:int startPage = (currentPage-


1)/PAGEBARSIZE*PAGEBARSIZE+1;


定义数组结束时的数字:int endPage = (currentPage-


1)/PAGEBARSIZE*PAGEBARSIZE+PAGEBARSIZE;


再判断endPage 
if(endPage>getTotalPages()){
endPage = getTotalPages();
}


再补充这个数组
int[] pageBar = new int[endPage-startPage+1];


3.在business.manager中创建PageManager.java类  完成这个类


pageManager类要返回一个pageBean对象,要想返回pageBean对


象,就得传入一个pageInfo对象,用getCurrentPage(pageInfo 


info)方法获得pageBean对象.


所以先在business.manager里创建pageInfo类。


pageInfo类的属性就是传入的当前页面currentPage和单位页面记录


数pageSize.


完成getCurrentPage()方法,需要在方法内部调用一个dao处理数据


库,所以创建一个PageDao类.


在pageDao里设置一个getPageQueryResult()方法,得到结果集


queryResult对象。


注意:把queryResult类设计在dao包里面。里面存放记录总数


totalRecords和记录集合beanList.




我的错误:DAO层要写正确
connection = 


JdbcUtils.getConnection();//得到连接
String sql = "select count(*) from 


page";
statement = 


connection.prepareStatement(sql);//让连接去预编译
rs = statement.executeQuery


();//让状态执行。
根据MVC思想,先访问一个serlvet,然后把该传的数据在这里给它


传进去。
应该把数据放在一个bean里面传进去,那么如何获取这个bean就是


自己要
写的,在页面上用的也这个bean里面的数据。


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 


Strict//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
这是HTML新规范,这样才能支持更多的。
<style type="text/css">
     .odd{background-color: #f3c3f3}
     .even{background-color: #c3f3c3}
     tr:hover{background-color: #888}
    </style>
    
    
  <script type="text/javascript">
  function gotoPage(pid){
  var psize = 


document.getElementById("psize").value;



window.location.href="${pageContext.request.contextPath}/


servlet/PageListServlet?pid="+pid+"&psize="+psize;
  }
  </script>


<c:forEach items="${pageBean.beanList}" var="page" 


varStatus="status">
     <tr class="${status.count%


2==1?'odd':'even'}">
     <td>
     ${page.id}
     </td>
     <td>
     ${page.name}


</td>
     </tr>
     </c:forEach>






html中表格的本质就一个格一个格的,而不是我们看到的表格,
如果我们设置为border=1,那么其实它的表格宽度就是2了。
















热点排行