java自定义分页标签实例
java自定义分页标签实例一、标签处理类:还是采用继承自BodyTagSupport(其实继承自TageSupport也行),而没有采用SimpleTagSupport(?)package org.qiujy.tag;import java.io.IOException;import java.util.Enumeration;import javax.servlet.http.HttpServletRequest;import javax.servlet.jsp.JspException;import javax.servlet.jsp.tagext.BodyTagSupport;/*** 自定义分页标签* 1.从表单中获得全部查询条件参数,生成对应的<inputtype=hidden>以备下次提交查询条件参数及值.*2.把当前页号(pageNo)设置成了请求参数,以便后台程序可以获得该值进行实时从数据数据库查询相应要显示的数据* 3.使用举例:* a) 后台程序:* //设置每页要显示的记录数,并保存到请求对象中(必须步骤)* int pageSize = 20;* request.setAttribute("pageSize",pageSize);* //获取当前页号(必须步骤)* String pageNo =request.getParameter("pageNo");* //利用这两参数进行数据查询...* b) 页面首先导入标签库: <%@ tagliburi="" prefix="q"%>* c) 页面使用标签: <q:pageTag recordCount="每页显示的记录数"gotoURI="要跳转到的目的地"/>** @author qiujy**/public class PageControllerTag extendsBodyTagSupport {/** 每页显示的记录数(标签的属性) */private int pageSize = 20;/** 目的地(标签的属性) */private String gotoURI;/** 总记录数名*/public static final String TOTAL = "total";/** 当前页号名*/public static final String PAGNENO = "pageNo"; /** 每页要显示的记录数名*/public static final String RECORDCOUNT = "pageSize";/** 目的地名*/public static final String GOTOURI = "gotoURI";//标签处理程序public int doStartTag() throws JspException {/** 当前页号(从请求对象中得到) */int pageNo = 1;/** 总记录数(从请求对象中得到) */int total = 0;/** 总页数(计算得出) */int totalPage = 1;HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();// 要输出到页面的HTML文本StringBuffer sb = new StringBuffer();sb.append("\r\n<form method='post' action='' ").append("name='pageController'>\r\n");// 获取所有提交的参数(包括查询条件参数) Enumeration enumeration =request.getParameterNames();String name = null;String value = null;while (enumeration.hasMoreElements()) {name = (String) enumeration.nextElement();value = request.getParameter(name);if (name.equals(RECORDCOUNT)) {continue;}// 从请求对象中获取要跳转到的页号if (name.equals(PAGNENO)) {if (null != value && !"".equals(value)) {pageNo = Integer.parseInt(value);System.out.println("from request pageNo====>"+ pageNo);}continue;}sb.append("<input type='hidden'name='").append(name).append("' value='").append(value).append("'/>\r\n");}//把当前页号设置成请求参数System.out.println("tag:pageNo=====>" + pageNo);sb.append("<input type='hidden'name='").append(PAGNENO).append("' value='").append(pageNo).append("'/>\r\n");// 从请求对象中获取总记录数String tot = (String)request.getAttribute(TOTAL);if (null != tot && !"".equals(tot)) {total = Integer.parseInt(tot);}//计算总页数totalPage = getTotalPage(total);System.out.println("total-->" + total);sb.append("<hr width='97%'/>\r\n");sb.append(" &nbs p;\r\n");sb.append("总").append(totalPage).append(" 页,当前第").append(pageNo).append(" 页\r\n");sb.append(" &nbs p;\r\n");if (pageNo == 1) {sb.append("首页");sb.append(" ");sb.append("上一页\r\n");} else {sb.append("<a href='#'onclick='turnOverPage(1)'>首页</a>\r\n");sb.append(" ");sb.append("<a href='#' onclick='turnOverPage(").append((pageNo -1)).append(")'>上一页</a>\r\n");}sb.append(" ");if (pageNo == totalPage) {sb.append("下一页");sb.append(" ");sb.append("尾页\r\n");} else {sb.append("<a href='#' onclick='turnOverPage(").append((pageNo +1)).append(")'>下一页</a>\r\n");sb.append(" ");sb.append("<a href='#' onclick='turnOverPage(") .append(totalPage).append(")'>尾页</a>\r\n"); }sb.append(" ");sb.append("跳到<selectonChange='turnOverPage(this.value)'>\r\n");for(int i = 1; i <= totalPage; i++){if(i == pageNo){sb.append(" <optionvalue='").append(i).append("' selected>第").append(i).append("页</option>\r\n");}else{sb.append(" <optionvalue='").append(i).append("'>第").append(i).append("页</option>\r\n");}}sb.append("</select>\r\n");// sb.append("<input type='text'name='").append(PAGNENO).append(// "' size='3' maxlength='3'/>\r\n");// sb.append("<input type='button'value='GO'").append(//"onclick='turnOverPage(pageNo.value)'/>\r\n"); sb.append(" \r\n");sb.append("</form>\r\n");// 生成提交表单的JSsb.append("<script language='javascript'>\r\n"); sb.append(" function turnOverPage(no){\r\n"); sb.append(" var form =document.pageController;\r\n");sb.append(" //页号越界处理\r\n");sb.append("if(no").append(">").append(totalPage).append(") {\r\n");sb.append("no=").append(totalPage).append(";\r\n");sb.append(" }\r\n");sb.append(" if(no").append("<=0){\r\n"); sb.append(" no=1;\r\n");sb.append(" }\r\n");sb.append("form.").append(PAGNENO).append(".value=no;\r\n"); sb.append("form.action='").append(gotoURI).append("';\r\n"); sb.append(" form.submit();\r\n");sb.append(" }\r\n");sb.append("</script>\r\n");try {pageContext.getOut().println(sb.toString());} catch (IOException e) {e.printStackTrace();}return super.doStartTag();}public String getGotoURI() {return gotoURI;}public void setGotoURI(String gotoURI) {this.gotoURI = gotoURI;}public int getPageSize() {return pageSize;}public void setPageSize(int pageSize) {this.pageSize = pageSize;}/*** 根据总记录数得到总页数** @return int 总页数*/private int getTotalPage(int total) {int totalPage = 1;if (total == 0) {totalPage = 1;} else {totalPage = (total % pageSize == 0) ? (total /pageSize): (total / pageSize + 1);}return totalPage;}}二、标签库描述文件:<?xml version="1.0" encoding="UTF-8"?><taglib xmlns="/xml/ns/j2ee"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/xml/ns/j2ee/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"version="2.0"><tlib-version>0.9</tlib-version><short-name>myCustomerTag</short-name><uri></uri><tag><name>pageTag</name><tag-class>org.qiujy.tag.PageControllerTag</tag-class><body-content>scriptless</body-content><attribute><name>pageSize</name><required>true</required><rtexprvalue>true</rtexprvalue></attribute><attribute><name>gotoURI</name><required>true</required><rtexprvalue>true</rtexprvalue></attribute></tag></taglib>三、页面使用:(由于是采用jsp2.0版本,所以不用在web.xml中声明tld文件了)<%@ page contentType="text/html; charset=utf-8" %><%@ taglib uri="WEB-INF/c.tld" prefix="c"%><%@ taglib uri="WEB-INF/fn.tld" prefix="fn"%><%@ taglib uri="WEB-INF/fmt.tld" prefix="fmt"%><%@ taglib uri="" prefix="q"%><html><head><title>博雅博客</title><meta http-equiv="Content-Type"content="text/html; charset=UTF-8"><link rel="StyleSheet" type="text/css"href="images/mystyle.css"></head><body><jsp:include flush="true"page="./templet/header.jsp"/><table border="1" width="900"bordercolor="#FCD447" align="center"><tr><td width="10%" valign="top"><!-- 导航栏开始--><table cellspacing="0" cellpadding="0"width="150" border="0"><tbody><tr><td><table cellspacing="0" cellpadding="0"width="150" border="0"><tbody><tr><td colspan="2" height="5"><img src="./images/default_icon.jpg"alt="logo" ></td></tr></tbody><tr><td><jsp:include flush="true"page="./templet/navigationbar.jsp"/></td></tr></table></td></tr></tbody></table><!-- 导航栏结束--></td><td width="90%" valign="top"><table width="100%"><tr><td><fontcolor="#FF0000"><b>查询关键字: 相关文章篇</b></font></td></tr><c:forEach var="art" items="" end="9"><tr><td><table width="100%"><tr><td><b>* <ahref="articleDetail.do?id="class="a02"></a> ... <fmt:formatDate value=""pattern="yyyy-MM-dd"/></b></td></tr><tr><td> <b>摘要:</b></td></tr></table></td></tr></c:forEach><tr><td><q:pageTag pageSize=""gotoURI="searchArticle.do"/></td></tr></table></td></table><jsp:include flush="true" page="./templet/footer.jsp" /> </body></html>。
jpage分页
今天,我给大家写出我的一个分页例子,希望对大家有用:首先inbox.jsp<%@page language="java"contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><%@taglib prefix="c"uri="/jsp/jstl/core"%><%@taglib prefix="f"uri="/jsp/jstl/fmt"%><%@taglib prefix="fn"uri="/jsp/jstl/functions"%><html><head><title>无标题文档</title><meta http-equiv="Content-Type"content="text/html; charset=utf-8"/><meta name="viewport"content="width=device-width, initial-scale=1.0"><!-- 最新 Bootstrap 核心 CSS 文件 --><link rel="stylesheet"href="${pageContext.request.contextPath}/css/jPages.css"><!-- 待修改 --><!-- jQuery文件。
务必在bootstrap.min.js 之前引入 --><link rel="stylesheet"href="/twitter-bootstrap/3.0.3/css/bootstrap.min.css"><link rel="stylesheet"href="/twitter-bootstrap/3.0.3/css/bootstrap-theme.min.css"><link rel="stylesheet"href="/bootstrap-datepicker/1.3.0/css/datepicker.min.css"><!-- jQuery文件。
java pageinfo用法
java pageinfo用法Java中的PageInfo用于分页查询时获取分页信息,包括总页数、总记录数、当前页码等。
PageInfo类是MyBatis自带的工具类,通过引入mybatis依赖后,可以直接使用。
使用PageInfo需要先进行分页查询,然后将查询结果传入PageInfo构造函数中。
例如:```javaList<User> userList =userMapper.selectByExample(example);PageInfo<User> pageInfo = new PageInfo<>(userList);```其中User是查询结果的实体类,example是查询条件。
通过PageInfo对象可以获取到以下分页信息:- getTotal():获取总记录数- getPages():获取总页数- getPageNum():获取当前页码- getPageSize():获取每页记录数- isHasNextPage():判断是否有下一页- isHasPreviousPage():判断是否有上一页- navigatepageNums(int navigatePages):获取当前页码的前后各navigatePages页码例如,获取总页数代码如下:```javaint total = pageInfo.getPages();```获取当前页码的前后各3页的页码:```javaint[] navigatePageNums = pageInfo.navigatepageNums(3); ```以上就是Java中PageInfo的用法。
java分页公式(一)
java分页公式(一)Java分页公式1. 什么是分页公式?分页公式是用于在Java程序中对数据进行分页展示的数学公式。
它可以根据每页显示的数据数量和当前页数,计算出数据在总量中的起始位置和结束位置,从而实现数据分页的功能。
2. 分页公式的常用公式总页数的计算公式总页数的计算公式是根据总数据量和每页显示数据量来计算的,公式如下:totalPage = ceil(totalCount / pageSize);其中,totalCount表示总数据量,pageSize表示每页显示的数据量,totalPage表示总页数。
举例说明:假设总共有50条数据,每页显示10条数据,那么根据上述公式,总页数为50 / 10 = 5。
当前页数据起始位置的计算公式当前页数据的起始位置是根据当前页数和每页显示数据量来计算的,公式如下:startIndex = (currentPage - 1) * pageSize;其中,currentPage表示当前页数,从1开始计数,pageSize表示每页显示的数据量,startIndex表示当前页数据的起始位置。
举例说明:假设当前页为第3页,每页显示10条数据,那么根据上述公式,起始位置为(3 - 1) * 10 = 20。
当前页数据结束位置的计算公式当前页数据的结束位置是根据当前页数据的起始位置和每页显示数据量来计算的,公式如下:endIndex = startIndex + pageSize - 1;其中,startIndex表示当前页数据的起始位置,pageSize表示每页显示的数据量,endIndex表示当前页数据的结束位置。
举例说明:假设当前页数据起始位置为20,每页显示10条数据,那么根据上述公式,结束位置为20 + 10 - 1 = 29。
3. 总结以上列举了Java分页公式中常用的三个公式,分别是总页数的计算公式、当前页数据起始位置的计算公式和当前页数据结束位置的计算公式。
MybatisPlus自定义方法实现分页
MybatisPlus自定义方法实现分页MyBatis Plus是一款基于MyBatis的强大ORM(Object Relational Mapping)框架,提供了很多方便的功能和特性,其中包括分页查询功能。
虽然MyBatis Plus已经提供了默认的分页查询方法,但有时我们可能需要自定义一些分页查询的方法来满足特定的需求。
下面将介绍如何使用MyBatis Plus来自定义方法实现分页查询。
首先,我们需要在项目中引入MyBatis Plus的依赖。
可以在`pom.xml`文件中添加以下依赖:```xml<dependency><artifactId>mybatis-plus-boot-starter</artifactId><version>最新版本</version></dependency>```接下来,我们需要定义一个Mapper接口,在该接口中添加自定义的分页查询方法。
可以在Mapper接口中定义一个方法,参数为`Page`对象和其他查询条件,返回值为`IPage`对象。
```javaimport org.apache.ibatis.annotations.Param;import java.util.List;public interface UserMapper extends BaseMapper<User>```然后,在对应的Mapper.xml文件中编写SQL语句来实现分页查询。
可以使用MyBatis的分页插件`PageHelper`来完成分页查询。
在Mapper.xml中添加以下代码:```xmlSELECT * FROM user WHERE name LIKE CONCAT('%',#{name},'%') </select>```在这个例子中,我们使用`SELECT * FROM user`查询所有符合条件的记录。
Java实现分页功能常见的几种方法
Java实现分页功能常见的⼏种⽅法⼀、limit关键字service层@Service@Transactionalpublic class ImplStudentService implements StudentService {@Resourceprivate StudentDao studentDao;@Overridepublic List<Student> selectAllStudent(String province, Integer offset, Integer limit) {return studentDao.selectAll(province,offset,limit);}}sql语句select * from student where province = #{province} limit #{offset},#{limit}⼆、hibernate分页service层@Overridepublic List getStudents(Integer pageNo,Integer pageSize) throws Exception {// 分页数据int[] startIdAndCount = new int[2];startIdAndCount[0] = pageNo * pageSize;startIdAndCount[1] = pageSize;return studentDao.selectStudentsByPage(startIdAndCount);}dao层@Overridepublic List findByHqlPage(int[] startIdAndCount) throws Exception {String hql = "...";try {Query query = getSession().createQuery(hql);// 设置分页if (startIdAndCount != null && startIdAndCount.length > 0) {int rowStartIdx = Math.max(0, startIdAndCount[0]);if (rowStartIdx > 0) {query.setFirstResult(rowStartIdx);// 设置开始取值的索引}if (startIdAndCount.length > 1) {int rowCount = Math.max(0, startIdAndCount[1]);if (rowCount > 0) {query.setMaxResults(rowCount);// 设置结束取值的索引}}}return query.list();} catch (RuntimeException re) {log.error("分页查询失败!", re);throw re;}}三、截取List查询结果分页(简单粗暴)...List<StudentEnroll> students = studentlDao.getAllStudents();int count = 0;if(studentEnrolls != null && studentEnrolls.size() > 0) {count = studentEnrolls.size();int fromIndex = pageNo * pageSize;int toIndex = (pageNo + 1) * pageSize;if(toIndex > count) {toIndex = count;}List<StudentEnroll> pageList = studentEnrolls.subList(fromIndex, toIndex);...四、mybatis框架pageHelper插件分页Spring整合:导⼊pom.xml<!-- https:///artifact/com.github.pagehelper/pagehelper --><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.1.2</version></dependency>配置项⽬配置⽂件(我在spring和mybatis整合的配置⽂件中配置的,如果在mybatis核⼼配置⽂件中配置,百度⼀下) <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><!-- 依赖数据源 --><property name="dataSource" ref="dataSource"/><!-- 注册加载myBatis映射⽂件 --><property name="mapperLocations"><array><value>classpath*:com/yyz/mapper/*Mapper.xml</value></array></property><!-- PageHelper分页配置 --><property name="plugins"><array><bean class="com.github.pagehelper.PageInterceptor"><property name="properties"><!--使⽤下⾯的⽅式配置参数,⼀⾏配置⼀个,后⾯会有所有的参数介绍 --><value><!--helperDialect属性来指定分页插件使⽤哪种⽅⾔。
mybatis-plus分页page写法
MyBatis-Plus 是一个MyBatis 的增强工具,在MyBatis 的基础上只做增强不做改变,为简化开发和提高效率而生。
MyBatis-Plus 提供了一种更为便捷的接口式编程方式,并封装了MyBatis 的常见操作,使得开发更为简单。
在MyBatis-Plus 中,分页功能可以通过`Page` 对象来实现。
以下是一个简单的例子:```java// 创建Page 对象Page<User> page = new Page<>(1, 10); // 第1页,每页显示10条// 设置查询条件page.add(new QueryWrapper<User>().eq("name", "old"));// 执行分页查询IPage<User> userPage = userMapper.selectPage(page, null);// 获取分页信息userPage.getMeta().setTotal(userMapper.selectCount(newQueryWrapper<User>().eq("name", "old")));// 获取数据列表List<User> userList = userPage.getRecords();```在这个例子中,我们首先创建了一个`Page` 对象,设置了要查询的页码和每页显示的条数。
然后,我们通过`QueryWrapper` 设置了查询条件。
接着,我们执行了分页查询,得到了一个`IPage` 对象。
最后,我们通过`IPage` 对象获取了分页信息和数据列表。
注意,这里的`userMapper` 是MyBatis-Plus 自动生成的Mapper 接口的实例。
如果你没有使用MyBatis-Plus 的自动生成功能,你需要自己创建Mapper 接口和实现类。
java 集合分页方法
java 集合分页方法在Java中,可以使用集合(Collection)和分页技术来实现分页功能。
以下是一个简单的Java分页方法的示例:```javaimport ;import ;public class PaginationHelper<T> {private int pageSize;private int currentPage;private List<T> dataList;public PaginationHelper(int pageSize, int currentPage, List<T> dataList) {= pageSize;= currentPage;= dataList;}public List<T> getPageData() {int start = (currentPage - 1) pageSize;int end = start + pageSize;if (start < 0) {start = 0;}if (end > ()) {end = ();}if (start >= end) {return new ArrayList<>();} else {return (start, end);}}}```这个`PaginationHelper`类包含一个泛型类型`T`,表示要分页的数据类型。
构造函数接受三个参数:每页的大小、当前页码和数据列表。
`getPageData()`方法返回当前页的数据列表。
它首先计算起始和结束索引,然后使用`subList()`方法从数据列表中提取出当前页的数据。
如果起始索引小于0或大于数据列表的大小,则返回一个空列表。
使用示例:```javaList<String> dataList = new ArrayList<>();// 添加数据到dataList中...PaginationHelper<String> paginationHelper = new PaginationHelper<>(10, 1, dataList);List<String> pageData = ();```在这个示例中,我们创建了一个`PaginationHelper`对象,将每页大小设置为10,当前页码设置为1,并将数据列表传递给构造函数。
java 分页调用多个分页接口的方法
java 分页调用多个分页接口的方法在实际开发中,我们经常会遇到需要从多个接口获取数据并进行分页展示的情况。
例如,我们需要从接口A获取用户列表,从接口B 获取订单列表,然后将两个列表合并后进行分页展示。
下面,我们将介绍一种简单而高效的方法来实现这个需求。
我们需要定义一个通用的分页请求类,用于封装分页查询的参数,如当前页码、每页数量等。
例如,我们可以定义一个名为PageRequest的类:```javapublic class PageRequest {private int page;private int size;// 省略getter和setter方法}```接下来,我们可以定义一个通用的分页结果类,用于封装分页查询的结果,如数据列表、总记录数等。
例如,我们可以定义一个名为PageResult的类:```javapublic class PageResult<T> {private List<T> data;private int total;// 省略getter和setter方法}```接着,我们可以定义一个分页调用接口的通用方法,用于根据不同的分页请求参数调用不同的接口并返回分页结果。
例如,我们可以定义一个名为getPageData的方法:```javapublic PageResult<Object> getPageData(PageRequest pageRequest) {// 根据分页请求参数调用接口A获取用户列表List<Object> userList = apiA.getUserList(pageRequest.getPage(),pageRequest.getSize());// 根据分页请求参数调用接口B获取订单列表List<Object> orderList = apiB.getOrderList(pageRequest.getPage(), pageRequest.getSize());// 将两个列表合并List<Object> mergedList = new ArrayList<>();mergedList.addAll(userList);mergedList.addAll(orderList);// 对合并后的列表进行分页处理List<Object> pageData = new ArrayList<>();int startIndex = (pageRequest.getPage() - 1) * pageRequest.getSize();int endIndex = Math.min(startIndex + pageRequest.getSize(), mergedList.size());if (startIndex < endIndex) {pageData = mergedList.subList(startIndex, endIndex);}// 构建分页结果对象PageResult<Object> pageResult = new PageResult<>();pageResult.setData(pageData);pageResult.setT otal(mergedList.size());return pageResult;}```我们可以在业务逻辑中调用getPageData方法来获取分页数据。
java中page分页对象的用法
java中page分页对象的用法在Java中,Page分页对象通常用于处理数据库查询结果的分页操作。
它包含以下信息:
1.数据列表:Page对象保存了一页的数据列表,通常是一个List 或者数组。
2.当前页数:Page对象记录了当前的页数。
3.每页显示的数据量:Page对象记录了每页显示的数据量,也称为每页大小。
4.总页数:Page对象计算了总页数,根据数据总量和每页大小计算得出。
5.数据总量:Page对象保存了数据库查询结果的总数据量。
Page对象的使用通常包括以下几个步骤:
1.创建一个Page对象,并指定每页大小和当前页数。
例如:Page page = new Page(10, 1)表示每页显示10条数据,当前页为第一页。
2.执行数据库查询操作,得到所有的数据列表和总数据量。
3.根据总数据量和每页大小计算得出总页数,并设置到Page对象中。
4.根据当前页数和每页大小,从数据列表中截取出当前页面的数据,并设置到Page对象中。
5.返回Page对象作为查询结果,将数据列表和分页信息一起返回给前端或者其他业务逻辑。
Page对象可以进一步拓展用来实现更复杂的分页功能,例如支持排序、过滤和动态调整每页大小等操作。
可以根据具体的业务需求,在Page对象中添加相应的字段和方法来支持这些功能。
此外,许多Java的Web框架和持久层框架(如Spring Boot、MyBatis等)已经提供了Page分页对象的封装和支持,简化了分页操作的开发过程,开发人员可以直接使用框架提供的分页功能,而无需手动处理Page对象。
JavaWeb学习之分页查询实例
JavaWeb学习之分页查询实例⼀、环境搭建客户端(发送请求)=> Servlet(处理请求,1、指定处理Service 2、指定对应页⾯) => Service(业务处理。
1、调⽤具体Dao并对返回数据做对应处理) => Dao(数据库操作。
单⼀增删改查)基本结构如下图⼆、代码实现分页 1、Sql语句(Sql Server 2012及以上) SELECT * FROM 表名 order by 排序字段OFFSET (当前页-1)*页容量ROWS FETCH next页容量rows only 2、domain包⽤于存储数据实体结构 2.1、PageBean.java1/**2* PageBean<T>,泛型可以提⾼其复⽤性3* ⽤于分页:4* 1、页容量(PageSize)5* 2、当前页⾯(PageIndex)6* 3、总页数(PageCount)7* 4、总条数(PageTotal)8* 5、分页数据集合(List)9*/10public class PageBean<T> {11private int PageSize;12private int PageIndex;13private int PageCount;14private int PageTotal;15private List<T> list;16public int getPageSize() {17return PageSize;18 }19public void setPageSize(int pageSize) {20 PageSize = pageSize;21 }22public int getPageIndex() {23return PageIndex;24 }25public void setPageIndex(int pageIndex) {26 PageIndex = pageIndex;27 }28public int getPageCount() {29return PageCount;30 }31public void setPageCount(int pageCount) {32 PageCount = pageCount;33 }34public int getPageTotal() {35return PageTotal;36 }37public void setPageTotal(int pageTotal) {38 PageTotal = pageTotal;39 }40public List<T> getList() {41return list;42 }43public void setList(List<T> list) {44this.list = list;45 }46 } 2.2、UserInfo1public class UserInfo {2private String UName;3private Date SubTime;//java.util.Date4private String Remark;5public String getUName() {6return UName;7 }8public void setUName(String uname) {9 UName = uname;10 }11public Date getSubTime() {12return SubTime;13 }14public void setSubTime(Date subTime) {15 SubTime = subTime;16 }17public String getRemark() {18return Remark;19 }20public void setRemark(String remark) {21 Remark = remark;22 }23 } 3、dao.impl包实现dao包中的接⼝1public class UserInfoDaoImpl implements IUserInfoDao {23/**4 * 获取分页数据5*/6 @Override7public List<UserInfo> getUserInfoByPageIndex(int p_intPageIdex) throws SQLException {8 QueryRunner runner= new QueryRunner(JDBCUtil.getDataSource());9return runner.query("select * from UserInfo order by Id offset ? row fetch next ? row only",10new BeanListHandler<UserInfo>(UserInfo.class), (p_intPageIdex-1)*PAGE_SIZE,PAGE_SIZE);11 }1213/**14 * 获取总记录数15*/16 @Override17public int getUserInfoCount() throws SQLException {18 QueryRunner runner= new QueryRunner(JDBCUtil.getDataSource());19 Long countLong= (Long) runner.query("select Count(*) from UserInfo",new ScalarHandler());20return countLong.intValue();//Long类型获取int类型的值21 }22 } 4、service.impl包实现service包中的接⼝1public class UserInfoServiceImpl implements IUserInfoService {23 @Override4public PageBean<UserInfo> getPageList(int p_intPageIndex) throws SQLException {5 PageBean<UserInfo> bean=new PageBean<UserInfo>();6 bean.setPageIndex(p_intPageIndex);7int pageSize=IUserInfoDao.PAGE_SIZE;8 bean.setPageSize(pageSize);9 IUserInfoDao dao=new UserInfoDaoImpl();10 bean.setList(dao.getUserInfoByPageIndex(p_intPageIndex));11int count=dao.getUserInfoCount();12 bean.setPageCount(count);1314//200,10 2015//201,10 1116 bean.setPageTotal(count % pageSize == 0 ? count / pageSize : (count / pageSize) + 1);17return bean;18 }19 } 5、servlet调⽤service.impl中的⽅法1public class UserInfoServlect extends HttpServlet {23 @Override4protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {5try {67int intPageIndex = 1;8if(req.getParameter("pageIndex")!=null) {9 intPageIndex=Integer.parseInt(req.getParameter("pageIndex"));10 }11 IUserInfoService service=new UserInfoServiceImpl();12 PageBean<UserInfo> bean= service.getPageList(intPageIndex);13 req.setAttribute("bean", bean);14 req.getRequestDispatcher("Index.jsp").forward(req, resp);15 } catch (SQLException e) {1617 e.printStackTrace();18 }19 }2021 @Override22protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {2324 doGet(req, resp);25 }26 } 6、创建jsp⽂件 6.1、导⼊标签库 把jstl包复制到⼯程lib⽬录下,使⽤<%@ taglib prefix="c" uri="/jsp/jstl/core" %>此代码将jstl标签库导⼊到当前页⾯ 注意:Index.jsp⽂件是创建在WebContent⽬录下 6.2、完整代码1 <%@ page language="java" contentType="text/html; charset=UTF-8"2 pageEncoding="UTF-8"%>3 <%@ taglib prefix="c" uri="/jsp/jstl/core" %>4<!DOCTYPE html>5<html>6<head>7<meta charset="UTF-8">8<title>Insert title here</title>9</head>10<body>11<TABLE border="1" width="700">12<TR>13<TD>姓名</TD>14<TD>时间</TD>15<TD>备注</TD>16</TR>17<c:forEach items="${bean.list }" var="userInfo">18<TR>19<TD>${userInfo.UName }</TD>20<!-- 根据 JavaBeans 规范,属性的前两个字母不能是⼀⼤⼀⼩,或者是⼀⼩⼀⼤。
