还是老规矩,先看前端页面查看需要传递哪些参数,并且把逻辑有问题的部分进行修改~
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page language="java"%>
<%@ page import="java.util.*"%>
<%@ page import="java.text.*"%>
IMUT_BANK ATM WelCome!!
IMUT BANK借记卡明细对账单
<%
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
request.setAttribute("date_time", df.format(new Date()));
%>
打印日期:${date_time }
卡 号
日 期
货 币
交 易 金 额
账 户 余 额
${user.icno }
${user.rm_date }
${user.rm_currency }
${user.rm_balance }
${user.rm_rest }
<%-- ${requestScope.pageBean.pageNum == 1} --%>
<%--
${pageContext.request.contextPath}/serchDetaile?pageNum=1
--%>
创建一个PageBean对象,封装这些数据:
package com.atm.pojo;
import java.util.List;
public class PageBean {
private int pageNum;//当前页页码,从请求传过来
private int pageSize; //每页显示的数据条数
private int totalRecord;//总的记录条数,查询数据库得到的数据
//需要计算得来
private int totalPage; //总页数 通过总条数和每页显示多少条计算得来
private int startIndex;//从哪开始拿
//把每页要显示的数据放集合里
private List list;
//分页显示的页数 1-5中的1和5
private int start;
private int end;
public int getPageNum() {
return pageNum;
}
public void setPageNum(int pageNum) {
this.pageNum = pageNum;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getTotalRecord() {
return totalRecord;
}
public void setTotalRecord(int totalRecord) {
this.totalRecord = totalRecord;
}
public int getTotalPage() {
return totalPage;
}
public void setTotalPage(int totalPage) {
this.totalPage = totalPage;
}
public int getStartIndex() {
return startIndex;
}
public void setStartIndex(int startIndex) {
this.startIndex = startIndex;
}
public List getList() {
return list;
}
public void setList(List list) {
this.list = list;
}
public int getStart() {
return start;
}
public void setStart(int start) {
this.start = start;
}
public int getEnd() {
return end;
}
public void setEnd(int end) {
this.end = end;
}
public PageBean(int pageNum, int pageSize, int totalRecord){
this.pageNum=pageNum;
this.pageSize=pageSize;
this.totalRecord=totalRecord;
//totalpage 总页数
if(totalRecord%pageSize==0){
//说明整除,正好每页显示pagesize条数据
this.totalPage=totalRecord/pageSize;
}else{
//不整除,就要多加一页,显示多余的数据
this.totalPage=totalRecord/pageSize+1;
}
//开始索引
this.startIndex=(pageNum-1)*pageSize;
this.start=1;
this.end=5;
if(totalPage<=5){
this.end=this.totalPage;
}else{
this.start=pageNum-2;
this.end=pageNum+2;
if(start<=0){
//比如当前页是第一页,或者第二页,就不如和这个规则
this.start=1;
this.end=5;
}
if(end >=this.totalPage){
//比如当前页是倒数第二页或者最后一页,也同样不符合上面这个规则
this.end=totalPage;
this.start=end-4;
}
}
}
}
之前我们把查询交易明细的代码都写到Userservice中了,其实应该写到RunMessageService中,对应的数据层和实现类也是同样的操作~
然后对交易记录的Servlet进行修改,插入分页功能:
package com.atm.servlet;
import com.atm.pojo.PageBean;
import com.atm.pojo.RunMessage;
import com.atm.pojo.User;
import com.atm.service.RunMessageService;
import com.atm.service.UserService;
import com.atm.service.impl.RunMessageServiceImpl;
import com.atm.service.impl.UserServiceImpl;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.util.List;
//查询交易记录
@WebServlet("/serchDetaile")
public class SerchDetaileServlet extends HttpServlet {
private RunMessageService runMessageService=new RunMessageServiceImpl();
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
User user =(User)request.getSession().getAttribute("ua");
try {
//分页处理
//获得页码
String pageNum=request.getParameter("pageNum");
int page=1;
if(pageNum!=null){
page=Integer.parseInt(pageNum);
}
//每页显示的条数
int pagesize=5;
//计算分页的总条数
int totalRecord= runMessageService.countRunmessage(user.getIcno());
//封装pagebean对象
PageBean pageBean=new PageBean<>(page,pagesize,totalRecord);
//查询当前页的数据,并设置到pageBean中返回
List lists =runMessageService.findRunMessageByPage(user.getIcno(),page,pagesize);
pageBean.setList(lists);
request.getSession().setAttribute("pageBean",pageBean);
response.sendRedirect("/changepage/UserDetaile.jsp");
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
}
接口:
//查询交易记录总条数
public int countRunmessage(String icno) throws Exception{
return runMessageDao.countRunMessage(icno);
}
//查询当前页数据
public List findRunMessageByPage(String icno,int page, int pagesize) throws Exception{
return runMessageDao.findRunMessageByPage(icno,page,pagesize);
}
数据层:
//用户交易记录总条数
public int countRunMessage(String icno) throws Exception{
Connection connection=DBUtils.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("select count(1) from runmessage where icno=?");
preparedStatement.setString(1,icno);
ResultSet rs= preparedStatement.executeQuery();
int totalRecord=0;
if (rs.next()){
totalRecord=rs.getInt(1);
}
DBUtils.release(connection,preparedStatement,null);
return totalRecord;
}
//查询当前页的交易记录
public List findRunMessageByPage(String icno,int page, int pagesize) throws Exception {
Connection connection=DBUtils.getConnection();
int startIndex =(page-1)*pagesize;
PreparedStatement preparedStatement = connection.prepareStatement("select * from runmessage where icno=? limit ?,?");
preparedStatement.setString(1,icno);
preparedStatement.setInt(2,startIndex);
preparedStatement.setInt(3,pagesize);
ResultSet rs= preparedStatement.executeQuery();
List lists=new ArrayList<>();
while (rs.next()){
RunMessage runMessage=new RunMessage();
runMessage.setId(rs.getInt(1));
runMessage.setIcno(rs.getString(2));
runMessage.setRm_date(rs.getString(3));
runMessage.setRm_currency(rs.getString(4));
runMessage.setRm_balance(rs.getDouble(5));
runMessage.setRm_rest(rs.getDouble(6));
lists.add(runMessage);
}
DBUtils.release(connection,preparedStatement,null);
return lists;
}
再随便添加几条数据方便测试效果:
重启一下系统,然后就发现功能实现啦!~
实现代码已上传~