一个完全用JSTL实现的JSP分页方案,大家帮忙看看有没有价值!!

randb 2005-12-18 09:09:31
样式是模仿Google的,我已经测试过了,
主要思想就是把分页模块用JSTL写成一个INCLUDE文件,
然后在要分页的页面调用,
当然要传入必要的五个分页参数
--------------------------------------------
pager.inc.jsp文件如下:
----------------------------------------------------------------------------------------
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!--接收参数total,总记录数-->
<c:set var="total" value="${param.total}"/>
<!--接收参数pageSize,每页最多显示的记录数-->
<c:set var="pageSize" value="${param.pageSize}"/>
<!--接收参数pageEnumShow,每次枚举的页面索引数-->
<c:set var="pageEnumShow" value="${param.pageEnumShow}"/>
<!--接收参数pageUrl,要分页的页面URL-->
<c:set var="pageUrl" value="${param.pageUrl}"/>
<c:choose>
<c:when test="${total > 0}">
<c:choose>
<c:when test="${total % pageSize == 0}">
<c:set var="pageTotal" value="${total / pageSize}"/>
</c:when>
<c:otherwise>
<c:set var="pageTotal" value="${(total - total % pageSize) / pageSize + 1}"/>
</c:otherwise>
</c:choose>
<c:choose>
<c:when test="${empty param.pageIndex}">
<c:set var="pageIndex" value="1"/>
</c:when>
<c:otherwise>
<c:set var="pageIndex" value="${param.pageIndex}"/>
</c:otherwise>
</c:choose>
<table cellpadding="2" cellspacing="0">
<tr>
<c:choose>
<c:when test="${pageTotal > pageEnumShow}">
<c:choose>
<c:when test="${pageTotal - pageEnumShow + 1 >= pageIndex}">
<c:set var="pageStart" value="${pageIndex}"/>
<c:set var="pageEnd" value="${pageIndex + pageEnumShow - 1}"/>
</c:when>
<c:otherwise>
<c:set var="pageStart" value="${pageTotal - pageEnumShow + 1}"/>
<c:set var="pageEnd" value="${pageTotal}"/>
</c:otherwise>
</c:choose>
</c:when>
<c:otherwise>
<c:set var="pageStart" value="${pageIndex}"/>
<c:set var="pageEnd" value="${pageTotal}"/>
</c:otherwise>
</c:choose>
<c:if test="${pageIndex > 1}">
<td nowrap="nowrap">
<a href="${pageUrl}?pageIndex=${pageIndex - 1}">
<img alt="" src="images/prev.gif" border="0"/>
<br/>
<span style="font-size: 12pt;font-weight:bold">Previous</span>
</a>
</td>
</c:if>
<c:forEach begin="${pageStart}" end="${pageEnd}" var="i">
<td nowrap="nowrap">
<c:choose>
<c:when test="${i == pageIndex && pageIndex == 1}">
<img alt="" src="images/first.gif" border="0"/>
<br/>
1
</c:when>
<c:when test="${pageIndex != i}">
<a href="${pageUrl}?pageIndex=${i}">
<img alt="" src="images/page.gif" border="0"/>
<br/>
<c:out value="${i}"/>
</a>
</c:when>
<c:when test="${pageIndex == i && pageIndex != pageTotal}">
<img alt="" src="images/current.gif" border="0"/>
<br/>
<c:out value="${i}"/>
</c:when>
<c:when test="${pageIndex == pageTotal && pageIndex == i}">
<img alt="" src="images/last.gif" border="0"/>
<br/>
<c:out value="${pageIndex}"/>
</c:when>
</c:choose>
</td>
</c:forEach>
<c:if test="${pageIndex < pageTotal}">
<td nowrap="nowrap">
<a href="${pageUrl}?pageIndex=${pageIndex + 1}">
<img alt="" src="images/next.gif" border="0"/>
<br/>
<span style="font-size: 12pt;font-weight:bold">Next</span>
</a>
</td>
</c:if>
</tr>
</table>
</c:when>
<c:otherwise>
暂无任何记录 !!
</c:otherwise>
</c:choose>
--------------------------------------------页面调用实例(以Struts为例)
<!--下面的这个JavaBean provider ,除了提供记录集合之外,还要提供计算记录总数的getter方法。我有一个简单的计算记录总数的思路就是让JavaBean把记录集保存为一个Collection,然后在它的getTotal方法里面简单地返回Collecition.size()就可以了!-->
----------------------------------------------------------------------------------------
<jsp:useBean id="provider" scope="request" class="mylib.UserBean"></jsp:useBean>
<c:set var="items" scope="request" value="${provider.allItems}"/>
----------------------------------------------------------------------------------------
<c:catch var="exception"><!--捕捉异常-->
<c:set var="pageSize" value="5"/><!--定义每页显示的记录数-->
<!--INCLUDE分页文件-->
<c:import url="pager.inc.jsp">
<!--传入分页参数-->
<c:param name="total" value="${provider.total}"/>
<c:param name="pageSize" value="${pageSize}"/>
<c:param name="pageEnumShow" value="3"/>
<c:param name="pageUrl" value="index.jsp"/>
<c:param name="pageIndex" value="${param.pageIndex}"/>
</c:import>
<!--Iteration begin-->
<br/>
<br/>
<logic:iterate name="items" id="item" offset="${(param.pageIndex - 1) * pageSize}" length="${pageSize}">
<bean:write name="item" property="userName"/>
<br/>
</logic:iterate>
<!--Iteration end-->
</c:catch>
<!--检测异常-->
<c:if test="${!empty exception}">
<font color="red">查询过程中发生错误 !</font>
</c:if>
-----------------------------------------------------------------------------------------
大家有什么想法可以给我提,谢谢了。。。
...全文
363 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ActiveT2 2005-12-19
  • 打赏
  • 举报
回复
c:set var="total" value="${param.total}"/>
<!--接收参数pageSize,每页最多显示的记录数-->
<c:set var="pageSize" value="${param.pageSize}"/>
<!--接收参数pageEnumShow,每次枚举的页面索引数-->
<c:set var="pageEnumShow" value="${param.pageEnumShow}"/>
<!--接收参数pageUrl,要分页的页面URL-->
<c:set var="pageUrl" value="${param.pageUrl}"/>

param是什么啊?
ActiveT2 2005-12-19
  • 打赏
  • 举报
回复
还有就是:太深了~~有点看不懂~~ @_@!!
randb 2005-12-19
  • 打赏
  • 举报
回复
TO  ActiveT2(小陈)
param 是 JSTL 里面预置的一个对象啊
它等同于request对象....
randb 2005-12-19
  • 打赏
  • 举报
回复
TO 楼上
应该在JSTL里面没有强制地规定数据类型,
而且据我了解好像JSTL里面也没有特定的转换数据类型的方法,
所以按通常的习惯本来应该是 total / pageSize + 1就可以了
可在JSTL里面,算出来是小数就是小数,它不会自动化为整数,
所以我就用了 (total - total % pageSize) / pageSize + 1
意思是先减去多余的那部分,然后加1

哪位有更好的方法可以提,但是前提是不出现Scriplet,只能用JSTL。。。
ActiveT2 2005-12-19
  • 打赏
  • 举报
回复
(total - total % pageSize) / pageSize + 1

不能理解,能解释一下吗?
序言 1. 想用jsp做网站的朋友看过来 2. 预备知识 3. java环境配置 3.1. 安装jdk 3.2. 配置tomcat服务器 1. 开始编写jsp 1.1. 开篇第一个jsp 1.2. B/S结构,请求与响应 2. 让jsp说hello 2.1. 另一个简单jsp 2.2. 中文乱码 2.2.1. 先解决响应中的乱码 2.2.2. POST乱码 2.2.3. GET乱码 3. 请求的跳转与转发 3.1. 范例 3.2. 如果用forward 3.3. 如果用redirect 3.4. forward和redirect的问题 3.4.1. 绝对路径与相对路径 3.4.1.1. 相对路径 3.4.1.2. 绝对路径 3.4.2. forward导致找不到图片 4. 四个作用域 4.1. 何为作用域 4.2. 例子:在线列表 5. 结合javabean实现CRUD 5.1. 概念和命名方式 5.2. Read(读取) 5.3. Create(创建) 5.4. Update(更新) 5.5. Delete(删除) 5.6. 用jdbc操作数据库 6. 贴近servlet 6.1. servlet是什么 6.2. jsp与servlet的关系 6.3. 使用servlet改写联系簿 7. 使用filter过滤请求 7.1. 批量设置请求编码 7.2. 用filter控制用户访问权限 7.3. filter所谓的特性 7.3.1. 请求映射 7.3.2. 过滤链 7.4. filter的详细配置 8. 配置listener监听器 8.1. 使用HttpSessionListener 8.2. 使用HttpSessionBindingListener 9. 封装taglib组件 9.1. 用taglib实现循环 9.2. 关于jstl 10. 综合电子留言板 10.1. 电子留言板用户指南 10.2. 数据库设计 10.3. 功能设计 10.3.1. 用户管理 10.3.2. 主题回复管理 10.3.3. 显示在线用户列表 10.4. 总结 11. 文件上传 11.1. 远程网盘 11.2. 浏览器部分的设置 12. 导出文件 12.1. 图片校验码 12.2. 图片校验码 - jsp版 13. 剖析el表达式 13.1. 再谈el(Expression Language) 13.2. 作用域 13.3. 运算符 14. 生命周期 14.1. 生命周期 14.2. 线程模型 14.3. 在jsp中定义类变量 14.4. jsp九大默认对象 15. 分页 15.1. 数据库分页 15.2. 使用jstl改写分页 16. Never End... 16.1. 对session何时生成的无用讨论 16.2. 对手工将jsp转换为servlet的无用讨论 16.3. 胡乱解释一下session 16.4. 下载文件乱码
【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,作为参考资料学习借鉴。 3、本资源作为“参考资料”如果需要实现其他功能,需要能看懂代码,并且热爱钻研,自行调试。 基于JSP+JavaBean+Servlet三层架构员工考勤管理系统源码+数据库+项目说明.zip # JavaWeb_Attendance 1. 软件开发流程(可说明软件的开发流程包括几个阶段,每个阶段做什么任务,出什么文档)z 1) 分析理解前端页面,将前端的html页面改成Jsp页面,JSP页面加入page标签 2) 将JSP页面中的静态数据 修改为从数据库查询到的动态数据,通过JSTL的ForEach进行循环遍历数据,并通过EL表达式取出数据。 3) 修改JSP代码中的分页查询部分代码, 并将(总记录条数,总页码数,每页要显示的数据List 当前页码,每页显示的记录条数(默认为5) 封装到PageBean类中) 4) 通过JSP中的标签的href属性 或 form的action属性 或 js代码的自定义提交方法进行跳转到Servlet层 5) Servlet层调用Dao层的操作数据库的方法,包括: 数据库的增删改查。添加、删除、查询、多表查询、模糊搜索。 6) 面向接口编程,先写dao接口 再写dao的实现类。 7) 操作完数据库,如果是查询数据 将结果集返回到servlet页面,通过setAttribute(key,value)将数据存入request作用域,跳转回JSP页面,再通过JSP页面的EL表达式获取存入的数据。 8) 如果是修改数据,修改完成后直接跳转页面就可 2. 项目整体功能概要(大体说明整个项目的功能) 所有功能全部实现 - 登录、注册(用户添加) - 登录后的首页,显示的是本地时间 - 用户管理 * 分页查询用户信息 * 修改用户用户信息(数据回显,修改) * 删除用户信息 * 添加用户信息 * 模糊搜索用户信息 * 批量删除用户信息 - 部门管理 * 分页查询部门信息 * 修改部门信息(数据回显,修改) * 删除部门信息(部门下人数为0才可删除,不为0就不能是删除) * 添加部门信息 * 模糊搜索部门信息 * 批量删除部门信息 - 日报管理 * 分页查询日报信息 * 修改日报信息(数据回显,修改) * 删除日报信息 * 添加日报信息 * 模糊搜索日报信息 * 批量删除日报信息 - 加班管理 * 加班申请分页查询 * 修改加班申请(数据回显,修改) * 删除加班申请 * 添加 * 模糊搜索 * 批量删除加班信息 - 休假管理 * 休假申请分页查询 * 修改休假申请(数据回显,修改) * 删除加休假申请 * 添加休假申请 * 模糊搜索休假信息 * 批量删除休假信息 - 审批管理(审批加班申请 和 审批休假申请) * 待处理的加班申请 的 分页查询 * 通过加班申请 * 驳回加班申请 * 待处理的休假申请 的 分页查询 * 通过休假申请 * 驳回休假申请 * 模糊搜索 待处理的 加班申请和休假申请 - 个人信息修改 * 根据登录的id查询数据库进行 数据的回显,保存后完成信息修改 - 我的桌面 * 当审批信息后,该页面就会显示通过还是驳回的信息及审批时间 4. 个人承担的开发任务说明(标明个人模块的完成情况,所开发的每个模块功能详细说明及界面) - 登录、注册(用户添加) 从输入框输入数据,在servlet层通过request.getParameter()获取form表单提交的参数,将获得的用户名、密码作为参数调用dao层的方法进行查询数据库,select * from t_user_info where username=? andpassword =? 如果数据库查询结果集不为空,则说明数据库中有该用户名和密码,可以登录成功。登录成功返回main.jsp页面,登录失败则提示账号或密码错误的信息。 public int searchId(Users u) { String sql = "select id from t_user_info where name = ? and password = ? "; conn = du.getConn(); ps = du.getPs(conn,sql); int myId = 0; try { ps.setString(1,u.getName());

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧