JSP、JSF的分页设计与实现
2010-12-05 13:47
357 查看
现在在宿舍闷得慌,把jsp的分页设计总结一下!
首先是分页实体类的设计。先看源代码:
当前页数、总页数、每页多少记录这些都是分页实体类中必须的。
在我的类中比较成功的设计是在其中增加了一个集合,用于保存查询到的数据,
也即查询一页的数据。
接下来是数据库的查询。
下面是一段具体的代码:
利用jdbc,将数据滚到所要查询的位置,查找具体的数据,放到上面提及的集合中。
将整个PageContrlInfo作为属性在页面中传递。这样可保持数据的最小量化。
在jsp页面上调用相应的servlet,传递相关的属性完成上下页操作。
以下是jsp的页面代码:
接下来是servlet的代码:
这样,所有的操作都在servlet和dao里操作,界面仅仅是显示,没有一点逻辑的处理。
很好的实现了分离。
JSF的分页其实也很简单。原理是一样的,只是增加了一个模型层:
将PageContrlInfo进行进一步的封装,然后在配置文件中进行配置:
即可很简单的实现分页。
首先是分页实体类的设计。先看源代码:
package com.dao; import java.util.List; /** * 分页处理控制信息类 * * @author 陈新杰 * */ public class PageContrlInfo { /** * 当前页数 */ private int curPage=1; /** * 最大页数 */ private int maxPage; /** * 每页的数据行数 */ private int rowsPerPage=2; /** * 总的数据行数 */ private int totalRowCount; /** * 存放数据的集合 */ private List dataList = null; /** * 获取当前页数 * @return */ public int getCurPage() { return curPage; } /** * 设置当前页数 * @param curPage 当前页数 */ public void setCurPage(int curPage) { this.curPage = curPage; } /** * 获取总页数 * @return */ public int getMaxPage() { if (totalRowCount % rowsPerPage == 0) return maxPage = totalRowCount / rowsPerPage; else return maxPage = totalRowCount / rowsPerPage + 1; } /** * 设置总页数 * @param maxPage */ public void setMaxPage(int maxPage) { this.maxPage = maxPage; } /** * 获取每页的行数 * @return */ public int getRowsPerPage() { return rowsPerPage; } /** * 设置每页的行数 * @param rowsPerPage */ public void setRowsPerPage(int rowsPerPage) { this.rowsPerPage = rowsPerPage; } /** * 获取总的数据行数 * @return */ public int getTotalRowCount() { return totalRowCount; } /** * 设置总的数据行数 * @param totalRowCount */ public void setTotalRowCount(int totalRowCount) { this.totalRowCount = totalRowCount; } /** * 获取数据集合 * @return */ public List getDataList() { return dataList; } /** * 设置数据集合 * @param dataList */ public void setDataList(List dataList) { this.dataList = dataList; } /** * 获取下一页 * @return */ public int getNextPage() { if (curPage == maxPage) { curPage = 1; } else { curPage += 1; } return curPage; } /** * 获取上一页 * @return */ public int getPrePage() { if (curPage == 1) curPage = maxPage; else curPage -= 1; return curPage; } }
当前页数、总页数、每页多少记录这些都是分页实体类中必须的。
在我的类中比较成功的设计是在其中增加了一个集合,用于保存查询到的数据,
也即查询一页的数据。
接下来是数据库的查询。
下面是一段具体的代码:
public void getStudents(PageContrlInfo contrlInfo) { // TODO Auto-generated method stub contrlInfo.setDataList(null); List studentList = new ArrayList(); String sql = "select * from student"; // 打开数据库连接 openConnection(); try { statement = connection.prepareStatement(sql, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); resultSet = statement.executeQuery(); resultSet.last(); int rowCount = resultSet.getRow(); // 获得ResultSet的总行数 contrlInfo.setTotalRowCount(rowCount); // 将resultset转换为list if (resultSet.absolute(contrlInfo.getRowsPerPage() * (contrlInfo.getCurPage() - 1) + 1)) { resultSet.previous(); studentList = ResultSetUtil.changeResultSet2List(resultSet, Student.class, contrlInfo.getRowsPerPage()); } contrlInfo.setDataList(studentList); // 打印学生信息 printStudentData(studentList); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { // 关闭数据库连接 closeConnection(); } }
利用jdbc,将数据滚到所要查询的位置,查找具体的数据,放到上面提及的集合中。
将整个PageContrlInfo作为属性在页面中传递。这样可保持数据的最小量化。
在jsp页面上调用相应的servlet,传递相关的属性完成上下页操作。
以下是jsp的页面代码:
<center> <c:url value='ShowStudentsSrv?result=prePage' scope="request" var="lastPage"/> <c:url value='ShowStudentsSrv?result=nextPage' scope="request" var="nextPage"/> <% request.setAttribute("student","${student}"); %> <a href="${lastPage}" mce_href="${lastPage}"><%=messageResource.getString("lastPage")%></a>|<%=messageResource.getString("theInfo")%> ${contrlInfo.curPage} <%=messageResource.getString("pageInfo")%>|<%=messageResource.getString("totalInfo")%> ${contrlInfo.maxPage} <%=messageResource.getString("pageInfo")%>| <a href="${nextPage}" mce_href="${nextPage}"><%=messageResource.getString("nextPage")%></a> </center>
接下来是servlet的代码:
PageContrlInfo contrlInfo = (PageContrlInfo) request.getSession() .getAttribute("contrlInfo"); String result = request.getParameter("result"); if (result.equals("nextPage")) contrlInfo.getNextPage(); if (result.equals("prePage")) contrlInfo.getPrePage(); StudentDAO studentDAO = new StudentDAOImpl(); studentDAO.getStudents(contrlInfo, id, name, age, gender, birthDate);
这样,所有的操作都在servlet和dao里操作,界面仅仅是显示,没有一点逻辑的处理。
很好的实现了分离。
JSF的分页其实也很简单。原理是一样的,只是增加了一个模型层:
package com.control; import java.util.List; import javax.faces.model.DataModel; import javax.faces.model.ListDataModel; import com.dao.PageContrlInfo; import com.dao.StudentDAO; import com.dao.StudentDAOImpl; public class StudentManager { private DataModel model; private int curPage; private int maxPage; PageContrlInfo contrlInfo = new PageContrlInfo(); public DataModel getStudents() { if (model == null) { model = new ListDataModel(); model.setWrappedData(getStudentList()); }else { model=null; model = new ListDataModel(); model.setWrappedData(getStudentList()); } return model; } private List getStudentList() { StudentDAO studentDAO = new StudentDAOImpl(); studentDAO.getStudents(contrlInfo); return contrlInfo.getDataList(); } public String lastPage(){ contrlInfo.getPrePage(); getStudents(); return "showStudents"; } public String nextPage(){ contrlInfo.getNextPage(); getStudents(); return "showStudents"; } public int getCurPage(){ return contrlInfo.getCurPage(); } public int getMaxPage(){ return contrlInfo.getMaxPage(); } public void setCurPage(int curPage) { this.curPage = curPage; } public void setMaxPage(int maxPage) { this.maxPage = maxPage; } }
将PageContrlInfo进行进一步的封装,然后在配置文件中进行配置:
<managed-bean> <managed-bean-name>studentManager</managed-bean-name> <managed-bean-class>com.control.StudentManager</managed-bean-class> <managed-bean-scope>session</managed-bean-scope> </managed-bean>
即可很简单的实现分页。
相关文章推荐
- JSP+Servlet+Tomcat+Mysql实现注册、登陆、修改、添加、查看、分页实例之----用户注册
- javabean servlet jsp实现分页功能代码解析
- Java毕业设计------基于JSP技术的健身房管理系统的设计与实现
- JSP实现分页
- JSP实现分页效果!(构造方法强大应用啊~~)
- JSP第九次课:网上商城后台--首页设计及管理员功能实现
- 网页设计:AspNetPager控件+repeater+存储过程实现高效分页
- jsp+mysql实现分页
- jsp学习-分页功能的实现
- jsp电子商务 购物车实现之一 设计篇
- javaBean+servlet+jsp实现分页效果
- 网站权限设计实现——套用JQuery EasyUI列表显示数据、分页、查询
- JSP中表单内容实现分页提交
- JSF项目中实现基于RBAC模型的权限管理设计
- JSP分页实现 代码
- jsp 导出word 的分页实现方案
- jsp分页显示的实现代码
- The Pager Tag Library 实现分页功能 (jsptags)
- 通用分页实现及其OO设计探讨
- JSP实现分页