一、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">
<!--搜索栏 -->
&nbsp;&nbsp;&nbsp;&nbsp;公司职位: <select name="ppid" id="pposition">
<option value="">请选择</option>
<!-- 需要注意的是{}里面不能有空格 -->
<c:forEach items="${PositionList}" var="pl">
<option value="${pl.ppid}">${pl.pposition}</option>
</c:forEach>
</select> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;团队: <select name="pteam" id="pteam">
<option value="">请选择</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;部门: <select name="pdid" id="pdepartment">
<option value="">请选择</option>
<c:forEach items="${DepartmentList}" var="dl">
<option value="${dl.pdid}">${dl.pdepartment}</option>
</c:forEach>
</select>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<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}&nbsp;个员工,共${PageBean.totalpage }&nbsp;页,当前为${PageBean.currentPage}&nbsp;页
&nbsp;
<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>
&nbsp;
<!-- 如果当前页不是第一页也不是最后一页,则有上一页和下一页这个超链接显示 -->
<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>
&nbsp;
<!-- 如果当前页是最后一页,则只有上一页这个超链接显示,下一页没有 -->
<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项目之查询后分页的更多相关文章

  1. 2016/05/05 smarty ①分页 ② 查询后分页 ③缓存

    samrty  分页   查询后分页 0505fch.php <?php include("init.inc.php"); include("DBDA.php&qu ...

  2. Java项目开发中实现分页的三种方式一篇包会

    前言   Java项目开发中经常要用到分页功能,现在普遍使用SpringBoot进行快速开发,而数据层主要整合SpringDataJPA和MyBatis两种框架,这两种框架都提供了相应的分页工具,使用 ...

  3. java 项目 存入mysql后 变问号 MySql 5.6 (X64) 解压版 1067错误与编码问题的解决方案

    [参考]MySQL 5.7.19 忘记密码 重置密码 my.ini示例 服务启动后停止 环境 Java环境JDK1.8  安装好了 mysql-5.6.38-winx64  idea2016(64) ...

  4. 【spring data jpa】带有条件的查询后分页和不带条件查询后分页实现

    一.不带有动态条件的查询 分页的实现 实例代码: controller:返回的是Page<>对象 @Controller @RequestMapping(value = "/eg ...

  5. 【Django+Element UI】使用一个接口文件,搞定分页获取数据,模糊查询后分页获取数据

    1:序列化获取数据的接口设计 1:分页获取序列化数据 2:是个能传参数的接口 class Society(APIView): def post(self, request): keywords = s ...

  6. idea中java项目增加module后,增加的目录(src)无法增加包(Package)

    在idea项目中,增肌model后,在项目根目录下增加src目录,右键发现无法增加包(Package). 仔细观察发现,新增加的src目录是棕色,而原先的src目录是浅蓝色的,见下图: 在src右键, ...

  7. Java项目中基于Hibernate分页总结

    1,First of all,  we should have a wrapper class for page,this class can calculate the startRow by th ...

  8. java 项目 导入成功后jsp页面报错处理方法

    本人新导入一个maven项目可是jsp页面一直报错,我先按照网上的经验操作如下步骤: 在pom.xml配置文件中添加上javax.servlet的相关依赖: <dependency>  & ...

  9. idea中java项目增加module后,手动增加xml文件,合并到webapp/WEB-INFO或WEB-INFO(包)

    当手工增加一个module,增加配置文件(如:web.xml)需要合并到文件夹里,要不众多文件在一个src文件夹下,太凌乱. 1. 合并到webapp/WEB-INFO下 a. 首先增加webapp目 ...

随机推荐

  1. vue的跳转方式(打开新页面)及传参

    1. router-link跳转 // 直接写上跳转的地址 <router-link to="/detail/one"> <span class="sp ...

  2. 添加QDialog的Layout布局属性操作

    转载:https://blog.csdn.net/u013015629/article/details/73874773 QDialog在创建完之后,在设计器QtDesigner中的布局默认是锁定的. ...

  3. react问题You must install peer dependencies yourself.

    npm WARN react-native@0.46.4 requires a peer of react@16.0.0-alpha.12 but none is installed. You mus ...

  4. mysql5.7的主从切换

    mysql5.7的主从切换 主库: master 10.11.0.211 从库: slave 10.11.0.210 目标:主从切换,将slave切换为master,master切换为slave 一. ...

  5. blade-boot操作之Idea使用Mave和Dockerfile文件推送到harbor仓库

    mvn clean package docker:build 错误提示: Failed to execute goal com.spotify:docker-maven-plugin:1.1.0:bu ...

  6. Flink Table Api & SQL 翻译目录

    Flink 官网 Table Api & SQL  相关文档的翻译终于完成,这里整理一个安装官网目录顺序一样的目录 [翻译]Flink Table Api & SQL —— Overv ...

  7. light4j一个轻量级的低延时、高吞吐量、内存占用量小的API平台

    1.背景(abstract) 笔者算是一个极客类型的程序员了.喜欢探索一些程序内在的原理.稳定性.自动化运维.健壮性,很多时间也会 去对程序的内存使用率.cpu使用率锱铢必较.尽量克扣掉不必要的cpu ...

  8. Python键盘按键模拟

    有时候我们需要使用python执行一些脚本,可能需要让程序自动按键或自动点击鼠标,下面的代码实现了对键盘的模拟按键, 需要安装pypiwin32,当然也可以直接用ctypes来实现. 输入:pip i ...

  9. (转)IntelliJ IDEA 插件 阿里巴巴Java开发手册(Alibaba Java Coding Guidelines)

    背景:idea安装插件,学习使用阿里巴巴开发插件. 在线和离线的安装方式. IntelliJ IDEA 插件 阿里巴巴Java开发手册(Alibaba Java Coding Guidelines) ...

  10. LeetCode176——第二高的薪水

    题目描述 编写一个 SQL 查询,获取 Employee 表中第二高的薪水(Salary) . +----+--------+ | Id | Salary | +----+--------+ | 1 ...