【java技术】实现后台分页技术
需求 :实现分页技术。
技术难点:客户端为服务器提供当前页(currentPage)和每页显示条数(rows)。服务器返回PageBean对象
解决办法:新建一个Page的对象,属性值有页码数,每页显示的数量,开始值。
效果图
一下是java后端代码的编写(参考)
封装PageBean类
public class PageBean<T> {
private int totalCount;// 总记录数
private int totalPage;// 总页码数
private List<T> list;// 每页的数据
private int currentPage;// 当前的页码
private int rows;//每页显示的记录数
@Override
public String toString() {
return "PageBean{" +
"totalCount=" + totalCount +
", totalPage=" + totalPage +
", list=" + list +
", currentPage=" + currentPage +
", rows=" + rows +
'}';
}
public int getTotalCount() {
return totalCount;
}
public void setTotalCount(int totalCount) {
this.totalCount = totalCount;
}
public int getTotalPage() {
return totalPage;
}
public void setTotalPage(int totalPage) {
this.totalPage = totalPage;
}
public List<T> getList() {
return list;
}
public void setList(List<T> list) {
this.list = list;
}
public int getCurrentPage() {
return currentPage;
}
public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}
public int getRows() {
return rows;
}
public void setRows(int rows) {
this.rows = rows;
}
}
FindUserByPageServlet类
@WebServlet("/findUserByPageServlet")
public class FindUserByPageServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String currentPage = request.getParameter("currentPage");// 获取当前页码
String rows = request.getParameter("rows");// 每页显示的条数
if(currentPage == null || "".equals(currentPage)){
currentPage = "1";
}
if(rows == null || "".equals(rows)){
rows = "5";
}
UserServiceImpl service = new UserServiceImpl();
PageBean<User> pb = service.findUserByPage(currentPage,rows);
// System.out.println(pb.toString());
request.setAttribute("pb",pb);
request.getRequestDispatcher("/list.jsp").forward(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
服务器返回PageBean对象的findUserByPage()方法
public PageBean<User> findUserByPage(String _currentPage, String _rows) {
int currentPage =Integer.parseInt(_currentPage);
int rows = Integer.parseInt(_rows);
if (currentPage <=0){
currentPage = 1;
}
PageBean<User> pb = new PageBean<User>();
pb.setCurrentPage(currentPage);
pb.setRows(rows);
// 调用dao查询总条数
int totalCount = dao.finTotalCount();
pb.setTotalCount(totalCount);
// 盗用dao查询list集合
// 计算开始的记录值
int start = (currentPage - 1) * rows;
List<User>list = dao.findByPage(start,rows);
pb.setList(list);
//计算总页码数
int totalPage = (totalCount % rows) == 0 ? totalCount/rows : (totalCount/rows) + 1;
pb.setTotalPage(totalPage);
return pb;
}
调用dao里的方法(数据库查询)
public int finTotalCount() {
String sql = "select count(*) from user";
return template.queryForObject(sql,Integer.class);
}
public List<User> findByPage(int start, int rows) {
String sql = "select * from user limit ? , ?";
return template.query(sql,new BeanPropertyRowMapper<User>(User.class),start,rows);
}