Java项目之查询后分页
一、Jsp页面:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>总经理页面的员工信息版块</title>
<link rel="stylesheet" href="layui/css/layui.css">
<script src="js/jquery.min.js"></script>
<style>
body{
width:100%;
}
/* 添加按钮样式 */
#updateList {
margin: 0 auto;
width: 300px;
height: 250px;
border: 1px solid #F00
}
</style>
</head>
<body>
<!-- 员工信息版块 -->
<div>
<form id="Form1" name="Form1"
action="${pageContext.request.contextPath}/ConditionPersonServlet"
method="post">
<!--搜索栏 -->
公司职位: <select name="ppid" id="pposition">
<option value="">请选择</option>
<!-- 需要注意的是{}里面不能有空格 -->
<c:forEach items="${PositionList}" var="pl">
<option value="${pl.ppid}">${pl.pposition}</option>
</c:forEach>
</select> 团队: <select name="pteam" id="pteam">
<option value="">请选择</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select> 部门: <select name="pdid" id="pdepartment">
<option value="">请选择</option>
<c:forEach items="${DepartmentList}" var="dl">
<option value="${dl.pdid}">${dl.pdepartment}</option>
</c:forEach>
</select>
<input type="submit" value="搜索" class="layui-btn layui-btn-normal">
<!-- 信息表 -->
<table class="layui-table">
<colgroup>
<col width="150">
<col width="200">
<col>
</colgroup>
<thead>
<tr>
<th>员工编号</th>
<th>员工姓名</th>
<th>公司职位</th>
<th>所属团队</th>
<th>所属部门</th>
<th></th>
</tr>
</thead>
<tbody>
<!-- varStatus="vs" 特有的属性,循环变量 varStatus="vs" -->
<c:forEach items="${PageBean.list}" var="pro">
<tr>
<td width=10%>${pro.pid}</td>
<td width=15%>${pro.pname}</td>
<td width=15%>${pro.pposition}</td>
<td width=10%>${pro.pteam}</td>
<td width=20%>${pro.pdepartment}</td>
<td width=30%>
<!-- PersonList是当前登录用户的信息集合 -->
<c:if test="${pro.pid==1}">
<a
href="${pageContext.request.contextPath}/PersonListByIdServlet?pid=${pro.pid}"
id="updatebtn" class="layui-btn " style="display: none">修改</a>
<a href="javascript:void(0)" onClick="del('${pro.pid}')"
class="layui-btn layui-btn-danger" style="display: none">辞退</a>
</c:if>
<c:if test="${pro.pid!=1}">
<a href="${pageContext.request.contextPath}/PersonListByIdServlet?pid=${pro.pid}"
id="updatebtn" class="layui-btn ">修改</a>
<a href="javascript:void(0)" onClick="del('${pro.pid}')"
class="layui-btn layui-btn-danger" style="margin-left:50px">辞退</a>
</c:if>
</td>
</tr>
</c:forEach>
</tbody>
</table> <%-- 构建分页导航 --%>
<nav aria-label="Page navigation">
<ul class="pagination">
共有${PageBean.totalCount} 个员工,共${PageBean.totalpage } 页,当前为${PageBean.currentPage} 页
<a
href="${pageContext.request.contextPath}/ConditionPersonServlet?currentPage=1">首页</a>
<!-- 如果当前页为第一页时,就没有上一页这个超链接显示 -->
<c:if test="${PageBean.currentPage ==1}">
<c:forEach begin="1" end="${PageBean.totalpage}" step="1" var="i">
<c:if test="${PageBean.currentPage == i}">
${i}
</c:if>
<c:if test="${PageBean.currentPage != i}">
<a
href="${pageContext.request.contextPath}/ConditionPersonServlet?currentPage=${i}">${i}</a>
</c:if>
</c:forEach>
<a
href="${pageContext.request.contextPath}/ConditionPersonServlet?currentPage=${PageBean.currentPage+1}">下一页</a>
</c:if>
<!-- 如果当前页不是第一页也不是最后一页,则有上一页和下一页这个超链接显示 -->
<c:if
test="${PageBean.currentPage > 1 && PageBean.currentPage < PageBean.totalpage}">
<a
href="${pageContext.request.contextPath}/ConditionPersonServlet?currentPage=${PageBean.currentPage-1}">上一页</a>
<c:forEach begin="1" end="${PageBean.totalpage}" step="1" var="i">
<c:if test="${PageBean.currentPage == i}">
${i}
</c:if>
<c:if test="${PageBean.currentPage != i}">
<a
href="${pageContext.request.contextPath}/ConditionPersonServlet?currentPage=${i}">${i}</a>
</c:if>
</c:forEach>
<a
href="${pageContext.request.contextPath}/ConditionPersonServlet?currentPage=${PageBean.currentPage+1}">下一页</a>
</c:if>
<!-- 如果当前页是最后一页,则只有上一页这个超链接显示,下一页没有 -->
<c:if test="${PageBean.currentPage == PageBean.totalpage}">
<a
href="${pageContext.request.contextPath}/ConditionPersonServlet?currentPage=${PageBean.currentPage-1}">上一页</a>
<c:forEach begin="1" end="${PageBean.totalpage}" step="1" var="i">
<c:if test="${PageBean.currentPage == i}">
${i}
</c:if>
<c:if test="${PageBean.currentPage != i}">
<a
href="${pageContext.request.contextPath}/ConditionPersonServlet?currentPage=${i}">${i}</a>
</c:if>
</c:forEach>
</c:if> <a
href="${pageContext.request.contextPath}/ConditionPersonServlet?currentPage=${PageBean.totalpage}">尾页</a>
</ul>
</div>
</body>
</html> <script type="text/javascript">
/* 点击删除按钮 */
function del(pid) {
var isdel = confirm("您确认要辞退该员工吗?(辞退即所有此人的信息均无)");
if (isdel) {
/* 除了form表单,其他的都是get提交,都需要? 拼接参数 */
window.location.href = "${pageContext.request.contextPath}/DeleteServlet?pid="
+ pid;
}
} /* 回显---找属性值为Pdepartment等的元素使其被选中*/
$(function() {
$("#pposition option[value='${Condition.ppid}']")
.prop("selected", true);
}) $(function() {
$("#pteam option[value='${Condition.pteam}']").prop("selected", true);
})
$(function() {
$("#pdepartment option[value='${Condition.pdid}']").prop("selected",
true);
})
</script>
二、javaBean类:
1、创建分页类
package domain;
//分页用类
import java.util.ArrayList;
import java.util.List;
//为了能多个地方调用这个,需要用泛型
public class PageBean<T> {
//封装当前页
private Integer currentPage;
//总页数
private Integer totalpage;
//每页显示条数
private Integer currentCount;
//总条数
private Integer totalCount;
//每页显示的数据
private List<T> list = new ArrayList<T>();
public Integer getCurrentPage() {
return currentPage;
}
public void setCurrentPage(Integer currentPage) {
this.currentPage = currentPage;
}
public Integer getTotalpage() {
return totalpage;
}
public void setTotalpage(Integer totalpage) {
this.totalpage = totalpage;
}
public Integer getCurrentCount() {
return currentCount;
}
public void setCurrentCount(Integer currentCount) {
this.currentCount = currentCount;
}
public Integer getTotalCount() {
return totalCount;
}
public void setTotalCount(Integer totalCount) {
this.totalCount = totalCount;
}
public List<T> getList() {
return list;
}
public void setList(List<T> list) {
this.list = list;
}
@Override
public String toString() {
return "PageBean [currentPage=" + currentPage + ", totalpage=" + totalpage + ", currentCount=" + currentCount
+ ", totalCount=" + totalCount + ", list=" + list + "]";
} }
2、创建查询所用的条件类
package domain; import java.io.Serializable; //将搜索条件创建一个JavaBean---都是String类型的(这个跟原来的类中的类型无关)是需要判断非空的
public class Condition implements Serializable{
private String ppid;
private String pteam;
private String pdid;
public String getPpid() {
return ppid;
}
public void setPpid(String ppid) {
this.ppid = ppid;
}
public String getPteam() {
return pteam;
}
public void setPteam(String pteam) {
this.pteam = pteam;
}
public String getPdid() {
return pdid;
}
public void setPdid(String pdid) {
this.pdid = pdid;
}
@Override
public String toString() {
return "Condition [ppid=" + ppid + ", pteam=" + pteam + ", pdid=" + pdid + "]";
} }
三、Dao层:
// 根据条件在员工信息表中搜索
public List<Message> getMessageByCondition(Condition condition, int index, Integer currentCount)
throws SQLException {
QueryRunner qr = new QueryRunner(MyDBUtils.getDataSource());
String sql = "select * from person join position ON person.ppid=position.ppid JOIN department ON person.pdid=department.pdid where 1=1";
// 需要将结果存在集合中(因数组长度不可变) DISTINCT去重
ArrayList<Object> arr = new ArrayList<Object>();
// trim()是去掉首尾空格
if (condition.getPpid() != null && condition.getPpid() != "") {
// sql += " and pposition like ?"; && condition.getPteam() != ""
// arr.add("%" + condition.getPposition() + "%");
sql += " and person.Ppid=?";
arr.add(condition.getPpid());
}
if (condition.getPdid() != null && condition.getPdid() != "") {
sql += " and person.Pdid=?";
arr.add(condition.getPdid());
}
if (condition.getPteam() != null && condition.getPteam() != "") {
sql += " and pteam=?";
arr.add(condition.getPteam());
}
sql += " limit ?,?";
arr.add(index);
arr.add(currentCount);
List<Message> list = qr.query(sql, new BeanListHandler<Message>(Message.class), arr.toArray());
return list;
}
2、Service层:
// 根据condition查询员工信息
public PageBean<Message> getMessageByCondition(Condition condition, Integer currentPage, Integer currentCount) { // 创建PageBean
PageBean<Message> pageBean = new PageBean<Message>();
// 设置当前页
pageBean.setCurrentPage(currentPage); // 设置每页显示的条数
pageBean.setCurrentCount(currentCount); // 设置总条数
int totalCount = 0;
try {
totalCount = personMessageDao.getTotalCount();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
pageBean.setTotalCount(totalCount);
// 计算总页数=总条数/每页显示的条数 //先整数*1.0变成小数,得到有小数点的-->向上取整,得到double类型-->再转为int
Integer totalPage = (int) Math.ceil(totalCount * 1.0 / currentCount);
// 设置总页数
pageBean.setTotalpage(totalPage);
// 设置每页显示的数据 // select *fromproduct limit (当前页-1)*每页显示的条数 , 每页显示的条数
int index = (currentPage - 1) * currentCount;
// 定义
List<Message> list = null;
try {
list = personMessageDao.getMessageByCondition(condition, index, currentCount);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
pageBean.setList(list); return pageBean; }
四、Web层:
package web; import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.List;
import java.util.Map; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.apache.commons.beanutils.BeanUtils; import dao.PersonListDao;
import domain.Condition;
import domain.Department;
import domain.Message;
import domain.PageBean;
import domain.Person;
import domain.Position;
import service.PersonListService;
import service.PersonMessageService; //当职位在总经理之下则进入此页面---员工信息里的分页和查询
public class PersonListServlet extends HttpServlet {
private PersonListService personListService = new PersonListService();
private PersonMessageService personMessageService = new PersonMessageService(); public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// post解决乱码
request.setCharacterEncoding("utf-8");
// 获得所有条件参数所在的Map
Map<String, String[]> map = request.getParameterMap();
// 创建Condition对象
Condition condition = new Condition();
// 用BeanUtils进行封装
try {
BeanUtils.populate(condition, map);
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 获取当前页
String currentPageStr = request.getParameter("currentPage");
// 需要设置默认--当点击进来的时候显示第一页
if (currentPageStr == null) {
currentPageStr = "1";
}
// 将字符串转为Integer
Integer currentPage = Integer.parseInt(currentPageStr);
// 设置每页显示的条数
Integer currentCount = 8;
// 调用service层方法
// 获得所有的职位的list-根据职位表把搜索的信息整合到主表中
List<Position> listp = personMessageService.getPosition();
// 获得所有的部门的list-根据职位表把搜索的信息整合到主表中
List<Department> listd = personMessageService.getDepartment();
// 获取员工信息的列表
PageBean<Message> list = personMessageService.getMessageByCondition(condition, currentPage, currentCount);
// 向域中存值
request.getSession().setAttribute("PageBean", list);
request.getSession().setAttribute("PositionList", listp);
request.getSession().setAttribute("DepartmentList", listd);
// 回显---将选择的选项进行显示在页面内
request.getSession().setAttribute("Condition", condition);
request.getRequestDispatcher("PersonList.jsp").forward(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
Java项目之查询后分页的更多相关文章
- 2016/05/05 smarty ①分页 ② 查询后分页 ③缓存
samrty 分页 查询后分页 0505fch.php <?php include("init.inc.php"); include("DBDA.php&qu ...
- Java项目开发中实现分页的三种方式一篇包会
前言 Java项目开发中经常要用到分页功能,现在普遍使用SpringBoot进行快速开发,而数据层主要整合SpringDataJPA和MyBatis两种框架,这两种框架都提供了相应的分页工具,使用 ...
- java 项目 存入mysql后 变问号 MySql 5.6 (X64) 解压版 1067错误与编码问题的解决方案
[参考]MySQL 5.7.19 忘记密码 重置密码 my.ini示例 服务启动后停止 环境 Java环境JDK1.8 安装好了 mysql-5.6.38-winx64 idea2016(64) ...
- 【spring data jpa】带有条件的查询后分页和不带条件查询后分页实现
一.不带有动态条件的查询 分页的实现 实例代码: controller:返回的是Page<>对象 @Controller @RequestMapping(value = "/eg ...
- 【Django+Element UI】使用一个接口文件,搞定分页获取数据,模糊查询后分页获取数据
1:序列化获取数据的接口设计 1:分页获取序列化数据 2:是个能传参数的接口 class Society(APIView): def post(self, request): keywords = s ...
- idea中java项目增加module后,增加的目录(src)无法增加包(Package)
在idea项目中,增肌model后,在项目根目录下增加src目录,右键发现无法增加包(Package). 仔细观察发现,新增加的src目录是棕色,而原先的src目录是浅蓝色的,见下图: 在src右键, ...
- Java项目中基于Hibernate分页总结
1,First of all, we should have a wrapper class for page,this class can calculate the startRow by th ...
- java 项目 导入成功后jsp页面报错处理方法
本人新导入一个maven项目可是jsp页面一直报错,我先按照网上的经验操作如下步骤: 在pom.xml配置文件中添加上javax.servlet的相关依赖: <dependency> & ...
- idea中java项目增加module后,手动增加xml文件,合并到webapp/WEB-INFO或WEB-INFO(包)
当手工增加一个module,增加配置文件(如:web.xml)需要合并到文件夹里,要不众多文件在一个src文件夹下,太凌乱. 1. 合并到webapp/WEB-INFO下 a. 首先增加webapp目 ...
随机推荐
- Linux环境下安装python3
1.安装前准备 CentOS 7 中默认安装了 Python,版本:2.7.5,由于很多基本的命令.软件包都依赖旧版本,比如:yum.所以,在更新 Python 时,建议不要删除旧版本,而且新旧版本可 ...
- javascript常用方法 - String
// 1.长字符串 // 1.1 let longString1 = "This is a very long string which needs " + "to wr ...
- QT5 编译提示 cannot find GL/gl.h ubuntu16.04
安装软件: sudo apt-get install mesa-common-dev sudo apt-get install libgl1-mesa-dev libglu1-mesa-dev
- syncronizationcontext
FormDesign.cs 增加变量定义 public string testName { get; set; } TaskWrapper.cs string tmpTest = &qu ...
- Spring MVC -- Spring Tool Suite和Maven(安装Tomcat、JDK)
Spring提供了自己的集成开发环境(IDE),称为Spring Tool Suite(STS),它可能是构建Spring应用程序的最佳IDE了.STS捆绑了Maven作为其默认依赖管理工具,因此不需 ...
- 做JAVA的需要了解的框架
spring netty Elasticsearch Eureka Hystrix 接口的依赖性管理 Zuul Config Bus ActiveMQ redis zookper quartz had ...
- go 调度机制简介
goroutine是go中最重要的功能之一,正是因为有了goroutine这样强大的工具,go在并发方面表现的特别优秀. 那么goroutine和普通的线程和协程有什么区别呢?首先,我们需要明白线程和 ...
- Centos7个性化桌面美化
个人电脑系统由Windows转Kali(Linux)再转Windows,工作后因为都是接触的Centos7系统,再加上厌烦年Win10,于是再次投回LInux的怀抱,将电脑系统直接重装为Linux系统 ...
- python入门之与用户交互
目录 一.程序与用户交互 1.1 什么是与用户交互 1.2 为什么要与用户交互 1.3 如何与用户交互 1.4 python2和python3中input的区别 1.4.1 python3中的inpu ...
- dell服务器在bios中指定raid5的热备盘
一.创建raid5 二.指定热备盘 选择第15块磁盘作为上面创建的raid5的热备盘 选中 选中我们刚创建的raid5,点击OK