批量选中删除(包含全选)---jsp,servlet
0.引言前面文章已经实现了登录,查询,添加,修改和删除等功能,本篇文章在前面的基础上继续实现删除选中的功能。一.分析删除功能分析》》》1.在前端list.jsp页面的删除选中的按钮中绑定需要删除的条目的id,如下代码中:<c:forEach items="${pb.list}" var="user" varStatus="s"><tr><td><inp
·
0.引言
前面文章已经实现了登录,查询,添加,修改和删除等功能,本篇文章在前面的基础上继续实现删除选中的功能。
一.分析
删除功能分析
》》》1.在前端list.jsp页面的删除选中的按钮中绑定需要删除的记录条目的id,如下代码中:
<script type="text/javascript">
//处理选中删除的js
function deluser(i) {
//用户安全提示
if(confirm("您确定需要删除吗?")){
location.href="${pageContext.request.contextPath }/delUserServlet?id="+i;
}
}
window.onload=function(){
//给删除选中按钮添加点击事件
document.getElementById("delselcted").onclick=function(){
if(confirm("您确定删除这些选项吗?")){ //在删除前给删除添加保险
//判断选项中是否有被选上的,如果没有的话不执行删除,否则没有if会造成空指针异常
var flag =false;
var cbs=document.getElementsByName("uid"); //获取所有的选项(包括选的,没有选的)
for(var i=0;i<cbs.length;i++){
if(cbs[i].checked){ //一旦有被选的项,就停止循环
flag=true;
break;
}
}
if(flag){//一旦有被选的项,就提交表单
//一旦删除选中,首先创建一个表单,把所有信息提交给delselectedservlet处理
document.getElementById("form").submit();
}
}
}
//一键全选,一键全不选
//通过id获取第一个全选项
document.getElementById("firstcb").onclick=function(){
var cbs=document.getElementsByName("uid");
//遍历下面所有的选项
for(var i=0;i<cbs.length;i++){
//设置cbs[i].checked的状态与第一个firstcb.checked相同
cbs[i].checked=this.checked;
}
};
}
</script>
<div style="float: right; margin: 5px;">
<a class="btn btn-primary" href="${pageContext.request.contextPath }/add.jsp">添加联系人</a>
<a class="btn btn-primary" href="javascript:void(0);" id="delselcted">删除选中</a>
</div>
接下来表单的
<%--下面这个form表单是为了提交所有选择的删除项 至delselectedservlet
至于delselectedservlet怎么获得那个项被选中,可以首先设置表单提交,然后将input中checkbox栏,设name="id"
使之该id的value=${user.id},最后通过表单提交给了delselectedservlet
--%>
<form action="${pageContext.request.contextPath }/delselectedservlet" id="form" method="post">
<table border="1" class="table table-bordered table-hover">
<tr class="success">
<th><input type="checkbox" id="firstcb"></th>
<th>编号</th>
<th>姓名</th>
<th>性别</th>
<th>年龄</th>
<th>籍贯</th>
<th>QQ</th>
<th>邮箱</th>
<th>操作</th>
</tr>
<c:forEach items="${pb.list}" var="user" varStatus="s">
<tr>
<%-- 这里-绑定了每个checkbox 的name=uid value绑定的是用户的id --%>
<td><input type="checkbox" name="uid" value="${user.id}"></td>
<td>${s.count+start}</td>
<td>${user.name}</td>
<td>${user.gender }</td>
<td>${user.age }</td>
<td>${user.address }</td>
<td>${user.qq }</td>
<td>${user.email }</td>
<td><a class="btn btn-default btn-sm" href="${pageContext.request.contextPath }/queryupdate?id=${user.id}">修改</a>
<a class="btn btn-default btn-sm" href="javascript:deluser(${user.id});" >删除</a></td>
</tr>
</c:forEach>
</table>
</form>
<div>
<nav aria-label="Page navigation">
<ul class="pagination">
<c:if test="${pb.currentPage==1 }"> <%--如果当前按钮为1,应该使他禁止状态 --%>
<li class="disabled">
<a href="${pageContext.request.contextPath }/finduserpageservlet?currentPage=${pb.currentPage-1}&rows=5&name=${condtion.name[0]}&address=${condtion.address[0]}&email=${condtion.email[0]}"
aria-label="Previous">
<span aria-hidden="true">«</span>
</a>
</li>
</c:if>
<c:if test="${pb.currentPage!=1 }"> <%--如果当前按钮不为1 --%>
<li>
<a href="${pageContext.request.contextPath }/finduserpageservlet?currentPage=${pb.currentPage-1}&rows=5&name=${condtion.name[0]}&address=${condtion.address[0]}&email=${condtion.email[0]}"
aria-label="Previous">
<span aria-hidden="true">«</span>
</a>
</li>
</c:if>
<c:forEach begin="1" end="${pb.totalPage }" step="1" var="i">
<c:if test="${pb.currentPage==i }"> <%--如果当前页码与循环体 刚好一致,就处于激活状态 --%>
<li class="active"><a href="${pageContext.request.contextPath }/finduserpageservlet?currentPage=${i}&rows=5&name=${condtion.name[0]}&address=${condtion.address[0]}&email=${condtion.email[0]}" >
${i}</a></li>
</c:if>
<c:if test="${pb.currentPage !=i }"> <%--如果当前页码与循环体 不一致,就处于非激活状态 --%>
<li><a href="${pageContext.request.contextPath }/finduserpageservlet?currentPage=${i}&rows=5&name=${condtion.name[0]}&address=${condtion.address[0]}&email=${condtion.email[0]}" >
${i}</a></li>
</c:if>
</c:forEach>
<c:if test="${pb.currentPage==pb.totalPage }"> <%--如果当前按钮为最大页码,应该使他禁止状态 --%>
<li class="disabled">
<a href="${pageContext.request.contextPath }/finduserpageservlet?currentPage=${pb.currentPage+1}&rows=5&name=${condtion.name[0]}&address=${condtion.address[0]}&email=${condtion.email[0]}"
aria-label="Previous" > <%--而又可以使用css是鼠标处于不可点击状态class="disable" --%>
<span aria-hidden="true">»</span>
</a>
</li>
</c:if>
<c:if test="${pb.currentPage!=pb.totalPage }"> <%--如果当前按钮不为不为最大页码 --%>
<li>
<a href="${pageContext.request.contextPath }/finduserpageservlet?currentPage=${pb.currentPage+1}&rows=5&name=${condtion.name[0]}&address=${condtion.address[0]}&email=${condtion.email[0]}"
aria-label="Previous" >
<span aria-hidden="true">»</span>
</a>
</li>
</c:if>
<span style="font-size: 25px;margin-left: 5px;">
<c:if test="${pb.totalCount==0 }">共0条记录,共0页</c:if>
<c:if test="${pb.totalCount!=0 }">共${pb.totalCount }条记录,共${pb.totalPage }页</c:if>
</span>
</ul>
</nav>
</div>
</div>
</body>
</html>
》》2.编写delselectedservlet获取uid(其实是选中的用户id)
#获取用户id的组(可能多个勾选)
#调用service层来删除用户信息
#删除完后,重新重定向跳转到查询所有用户的界面
》》3.编写userservice类和userDao类
#遍历从上一步delselectedservlet传过来的id数组
#调用根据id来删除数据库用户的信息
二.代码的编写
2.1 list.jsp页面绑定删除选中用户的uid
然后通过提交表单的方式把删除选中用户的uid传入到了/delselectedservlet进行处理
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<!-- 网页使用的语言 -->
<html lang="zh-CN">
<head>
<!-- 指定字符集 -->
<meta charset="utf-8">
<!-- 使用Edge最新的浏览器的渲染方式 -->
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<!-- viewport视口:网页可以根据设置的宽度自动进行适配,在浏览器的内部虚拟一个容器,容器的宽度与设备的宽度相同。
width: 默认宽度与设备的宽度相同
initial-scale: 初始的缩放比,为1:1 -->
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
<title>用户信息管理系统</title>
<!-- 1. 导入CSS的全局样式 -->
<link href="css/bootstrap.min.css" rel="stylesheet">
<!-- 2. jQuery导入,建议使用1.9以上的版本 -->
<script src="js/jquery-2.1.0.min.js"></script>
<!-- 3. 导入bootstrap的js文件 -->
<script src="js/bootstrap.min.js"></script>
<style type="text/css">
td, th {
text-align: center;
}
.disable {
pointer-events: none;
}
</style>
<script type="text/javascript">
function deluser(i) {
//用户安全提示
if(confirm("您确定需要删除吗?")){
location.href="${pageContext.request.contextPath }/delUserServlet?id="+i;
}
}
window.onload=function(){
//给删除选中按钮添加点击事件
document.getElementById("delselcted").onclick=function(){
if(confirm("您确定删除这些选项吗?")){ //在删除前给删除添加保险
//判断选项中是否有被选上的,如果没有的话不执行删除,否则没有if会造成空指针异常
var flag =false;
var cbs=document.getElementsByName("uid"); //获取所有的选项(包括选的,没有选的)
for(var i=0;i<cbs.length;i++){
if(cbs[i].checked){ //一旦有被选的项,就停止循环
flag=true;
break;
}
}
if(flag){//一旦有被选的项,就提交表单
document.getElementById("form").submit(); //一旦删除选中,首先创建一个表单,把所有信息提交给delselectedservlet处理
}
}
}
//一键全选,一键全不选
//通过id获取第一个全选项
document.getElementById("firstcb").onclick=function(){
var cbs=document.getElementsByName("uid");
//遍历下面所有的选项
for(var i=0;i<cbs.length;i++){
//设置cbs[i].checked的状态与第一个firstcb.checked相同
cbs[i].checked=this.checked;
}
};
}
</script>
</head>
<body>
<div class="container">
<h3 style="text-align: center">用户信息列表</h3>
<div style="float: left;">
<form class="form-inline" action="${pageContext.request.contextPath }/finduserpageservlet" method="post">
<div class="form-group">
<label for="exampleInputName2">姓名</label>
<input type="text" class="form-control" id="exampleInputName2" name="name" value="${condtion.name[0] }">
</div>
<div class="form-group">
<label for="exampleInputName3">籍贯</label>
<input type="text" class="form-control" id="exampleInputName3" name="address" value="${condtion.address[0]}">
</div>
<div class="form-group">
<label for="exampleInputEmail2">邮箱</label>
<input type="email" class="form-control" id="exampleInputEmail2" name="email" value="${condtion.email[0]}">
</div>
<button type="submit" class="btn btn-default">查询</button>
</form>
</div>
<div style="float: right; margin: 5px;">
<a class="btn btn-primary" href="${pageContext.request.contextPath }/add.jsp">添加联系人</a>
<a class="btn btn-primary" href="javascript:void(0);" id="delselcted">删除选中</a>
</div>
<%--下面这个form表单是为了提交所有选择的删除项 至delselectedservlet
至于delselectedservlet怎么获得那个项被选中,可以首先设置表单提交,然后将input中checkbox栏,设name="id"
使之该id的value=${user.id},最后通过表单提交给了delselectedservlet
--%>
<form action="${pageContext.request.contextPath }/delselectedservlet" id="form" method="post">
<table border="1" class="table table-bordered table-hover">
<tr class="success">
<th><input type="checkbox" id="firstcb"></th>
<th>编号</th>
<th>姓名</th>
<th>性别</th>
<th>年龄</th>
<th>籍贯</th>
<th>QQ</th>
<th>邮箱</th>
<th>操作</th>
</tr>
<c:forEach items="${pb.list}" var="user" varStatus="s">
<tr>
<td><input type="checkbox" name="uid" value="${user.id}"></td>
<td>${s.count+start}</td>
<td>${user.name}</td>
<td>${user.gender }</td>
<td>${user.age }</td>
<td>${user.address }</td>
<td>${user.qq }</td>
<td>${user.email }</td>
<td><a class="btn btn-default btn-sm" href="${pageContext.request.contextPath }/queryupdate?id=${user.id}">修改</a>
<a class="btn btn-default btn-sm" href="javascript:deluser(${user.id});" >删除</a></td>
</tr>
</c:forEach>
</table>
</form>
<div>
<nav aria-label="Page navigation">
<ul class="pagination">
<c:if test="${pb.currentPage==1 }"> <%--如果当前按钮为1,应该使他禁止状态 --%>
<li class="disabled">
<a href="${pageContext.request.contextPath }/finduserpageservlet?currentPage=${pb.currentPage-1}&rows=5&name=${condtion.name[0]}&address=${condtion.address[0]}&email=${condtion.email[0]}"
aria-label="Previous">
<span aria-hidden="true">«</span>
</a>
</li>
</c:if>
<c:if test="${pb.currentPage!=1 }"> <%--如果当前按钮不为1 --%>
<li>
<a href="${pageContext.request.contextPath }/finduserpageservlet?currentPage=${pb.currentPage-1}&rows=5&name=${condtion.name[0]}&address=${condtion.address[0]}&email=${condtion.email[0]}"
aria-label="Previous">
<span aria-hidden="true">«</span>
</a>
</li>
</c:if>
<c:forEach begin="1" end="${pb.totalPage }" step="1" var="i">
<c:if test="${pb.currentPage==i }"> <%--如果当前页码与循环体 刚好一致,就处于激活状态 --%>
<li class="active"><a href="${pageContext.request.contextPath }/finduserpageservlet?currentPage=${i}&rows=5&name=${condtion.name[0]}&address=${condtion.address[0]}&email=${condtion.email[0]}" >
${i}</a></li>
</c:if>
<c:if test="${pb.currentPage !=i }"> <%--如果当前页码与循环体 不一致,就处于非激活状态 --%>
<li><a href="${pageContext.request.contextPath }/finduserpageservlet?currentPage=${i}&rows=5&name=${condtion.name[0]}&address=${condtion.address[0]}&email=${condtion.email[0]}" >
${i}</a></li>
</c:if>
</c:forEach>
<c:if test="${pb.currentPage==pb.totalPage }"> <%--如果当前按钮为最大页码,应该使他禁止状态 --%>
<li class="disabled">
<a href="${pageContext.request.contextPath }/finduserpageservlet?currentPage=${pb.currentPage+1}&rows=5&name=${condtion.name[0]}&address=${condtion.address[0]}&email=${condtion.email[0]}"
aria-label="Previous" > <%--而又可以使用css是鼠标处于不可点击状态class="disable" --%>
<span aria-hidden="true">»</span>
</a>
</li>
</c:if>
<c:if test="${pb.currentPage!=pb.totalPage }"> <%--如果当前按钮不为不为最大页码 --%>
<li>
<a href="${pageContext.request.contextPath }/finduserpageservlet?currentPage=${pb.currentPage+1}&rows=5&name=${condtion.name[0]}&address=${condtion.address[0]}&email=${condtion.email[0]}"
aria-label="Previous" >
<span aria-hidden="true">»</span>
</a>
</li>
</c:if>
<span style="font-size: 25px;margin-left: 5px;">
<c:if test="${pb.totalCount==0 }">共0条记录,共0页</c:if>
<c:if test="${pb.totalCount!=0 }">共${pb.totalCount }条记录,共${pb.totalPage }页</c:if>
</span>
</ul>
</nav>
</div>
</div>
</body>
</html>
2.2 delselectedservlet的编写
package web;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import service.USerService;
import service.UserServiceImpl;
@WebServlet("/delselectedservlet")
public class DelSelectedServlet extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
this.doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1.设置编码
req.setCharacterEncoding("utf-8");
//批量选中删除
//2.获得前端选中的所有删除项的id
String[] ids=req.getParameterValues("uid");
USerService uSerService=new UserServiceImpl();
uSerService.delselecteduser(ids); //传进去的是id数组
//3.跳转到查询所有的用户的jsp页面
resp.sendRedirect(req.getContextPath()+"/finduserpageservlet");
}
}
2.3 service层的userServi接口和UserServiceImpl实现类的编写
userServi接口
package service;
//user的业务接口
import java.util.List;
import java.util.Map;
import domain.PageBean;
import domain.User;
public interface USerService {
//定义业务查询抽象方法
public List<User> findAll();
public void addUser(User user);
public void deluser(String id);
public User findUserById(String idString);
public void updateuser(User user);
public void delselecteduser(String[] ids); //删除选中用户的抽象方法
public PageBean<User> findUserByPage(String currentPage, String row, Map<String, String[]> condtion); //模糊的分页查询
PageBean<User> findUserByPage(String _currentPage, String _row); //普通的分页查询
}
UserServiceImpl实现类
package service;
import java.util.List;
import java.util.Map;
import dao.UserDao;
import dao.UserDaoImpl;
import domain.PageBean;
import domain.User;
public class UserServiceImpl implements USerService{
UserDao userDao=new UserDaoImpl();
@Override
public List<User> findAll() {
//调用dao,操作数据库,查询所有的用户
return userDao.findAll();
}
public void addUser(User user) {
//调用添加用户的方法
userDao.addUser(user);
}
public void deluser(String id) {
//删除用户信息
userDao.deluser(Integer.parseInt(id)); //将参数变为整数
}
@Override
public User findUserById(String idString) {
//通过id来查询需要修改的用户信息
return userDao.findUserById(Integer.parseInt(idString));
}
@Override
public void updateuser(User user) {
// 根据update.jsp中的用户信息修改数据库的用户信息
userDao.updateuser(user);
}
@Override
public void delselecteduser(String[] ids) {
//批量选中删除
if(ids!=null&&ids.length>0) { //判断是否有用户被选中,防止空指针异常
//批量选中删除
//根据id数组,删除选中的用户
for(String id:ids) {//遍历数组
userDao.deluser(Integer.parseInt(id)); //参数转换integer
}
}
}
//模糊的分页查询
//condtion是模糊查询的条件
@Override
public PageBean<User> findUserByPage(String _currentPage, String _row,Map<String, String[]> condtion) {
// 分页查询 ,根据当前页码和每页个数可以查出,每一页的开始页码
int currentPage=Integer.parseInt(_currentPage); //字符串转换整形
int row=Integer.parseInt(_row); //字符串转化成整形
//封装对象
PageBean<User> pageBean=new PageBean<User>();
//调用userdao接口的方法可以查询总共记录条数
int total=userDao.totalCount(condtion);
pageBean.setTotalCount(total);
//获取总共分多少页
int pagenumber=(total%row)==0 ? total/row :(total/row)+1;
pageBean.setTotalPage(pagenumber);
//注意:
//判断分页按钮到达1和最大页码是应该不能在变化了
if(currentPage<1) { //currentPage<0时
currentPage=1;
}
if(currentPage>pagenumber) {
currentPage=pagenumber; //currentPage>pagenumber时
}
pageBean.setCurrentPage(currentPage);
pageBean.setRows(row);
//分页查询 首先根据当前页码和每页个数记录计算每页开始的页码
//获得每页的记录
int n=(currentPage-1)>=0?(currentPage-1):0;
int s=n*row;
List<User> list =userDao.findByPage(s,row,condtion);
pageBean.setList(list);
//System.out.println(list);
return pageBean;
}
@Override
public PageBean<User> findUserByPage(String _currentPage, String _row) {
// 分页查询 ,根据当前页码和每页个数可以查出,每一页的开始页码
int currentPage=Integer.parseInt(_currentPage); //字符串转换整形
int row=Integer.parseInt(_row); //字符串转化成整形
//封装对象
PageBean<User> pageBean=new PageBean<User>();
//调用userdao接口的方法可以查询总共记录条数
int total=userDao.totalCount();
pageBean.setTotalCount(total);
//获取总共分多少页
int pagenumber=(total%row)==0 ? total/row :(total/row)+1;
pageBean.setTotalPage(pagenumber);
//注意:
//判断分页按钮到达1和最大页码是应该不能在变化了
if(currentPage<1) { //currentPage<0时
currentPage=1;
}
if(currentPage>pagenumber) {
currentPage=pagenumber; //currentPage>pagenumber时
}
pageBean.setCurrentPage(currentPage);
pageBean.setRows(row);
//分页查询 首先根据当前页码和每页个数记录计算每页开始的页码
//获得每页的记录
int n=(currentPage-1)>=0?(currentPage-1):0;
int s=n*row;
List<User> list =userDao.findByPage(s,row);
pageBean.setList(list);
//System.out.println(list);
return pageBean;
}
}
2.4 在Dao层中UserDao接口,UserDaoImpl实现类分别编写deluser抽象方法和deluser具体实现方法。
其实就是调用根据用户id来删除用户的方法
UserDao接口
package dao;
import java.util.List;
import java.util.Map;
import domain.User;
public interface UserDao {
public List<User> findAll(); //抽象方法
public void addUser(User user);
public void deluser(int id); //根据整型的id来删除用户
public User findUserById(int parseInt);
public void updateuser(User user);
public int totalCount(); //查询总记录数
public int totalCount(Map<String, String[]> condtion); //模糊查询总记录数
public List<User> findByPage(int s, int row); //查询每个分页的记录
public List<User> findByPage(int s, int row, Map<String, String[]> condtion); //模糊查询每个页的记录
}
UserDaoImpl实现类
package dao;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.management.Query;
import javax.xml.transform.Templates;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import com.alibaba.druid.sql.dialect.oracle.ast.clause.ModelClause.ReturnRowsClause;
import domain.LoginUser;
import domain.User;
import utils.JDBCUtils;
public class UserDaoImpl implements UserDao{
JdbcTemplate jdbcTemplate =new JdbcTemplate(JDBCUtils.getDataSource());
public List<User> findAll() {
// 操作数据库,查询
String sql="select * from user";
List<User> users=jdbcTemplate.query(sql,new BeanPropertyRowMapper<User>(User.class));
return users;
}
public LoginUser checkLoginUser( LoginUser loginUser) {
//查询登录用户信息
String sqlString="select* from loginuser where username=? and password=?";
//System.out.println("111"+loginUser);
try {
LoginUser lu=(LoginUser) jdbcTemplate.queryForObject(sqlString, new BeanPropertyRowMapper<LoginUser>(LoginUser.class)
,loginUser.getUserName(),loginUser.getPassword());
return lu;
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
return null;
}
}
public void addUser(User user) {
//调用添加用户的方法,
//使用sql语句
String sql="insert into user values(null,?,?,?,?,?,?)";
jdbcTemplate.update(sql,user.getName(),user.getGender(),user.getAge(),user.getAddress(),
user.getQq(),user.getEmail());
}
@Override
public void deluser(int id) {
//删除用户信息
String sql="delete from user where id=?";
jdbcTemplate.update(sql,id);
}
@Override
public User findUserById(int parseInt) {
//根据id查询用户的信息
String sql="select * from user where id=?";
User user=jdbcTemplate.queryForObject(sql,new BeanPropertyRowMapper<User>(User.class),parseInt);
return user;
}
@Override
public void updateuser(User user) {
// 根据update.jsp中的用户信息修改数据库的用户信息
String sql="update user set name=?,gender=?,age=?,address=?,qq=?,email=? where id=?";
jdbcTemplate.update(sql,user.getName(),user.getGender(),user.getAge(),user.getAddress(),
user.getQq(),user.getEmail(),user.getId());
}
@Override
public int totalCount() {
// 普通查询数据库所有的记录条数
String sql="select count(*) from user";
return jdbcTemplate.queryForObject(sql, Integer.class);
}
//模糊查询总记录数
@Override
public int totalCount(Map<String, String[]> condtion) {
//1.定义初始化模板的sql语句
String sql="select count(*) from user where 1 = 1 ";
//2.遍历map集合,用stringBuilder存储拼接的sql语句,list存储map的值
StringBuilder sb=new StringBuilder(sql);
List<Object> list=new ArrayList<Object>();
Set<String> key=condtion.keySet();
//System.out.println(key);
for(String k:key) {
//排除分页的currentPage,rows请求的键值
if("currentPage".equals(k)||"rows".equals(k)) {
continue;
}
//获取value
String val=condtion.get(k)[0];
//判断是否有值
if(val != null&&!"".equals(val)) {//如果有且不能空字符串,则是查询条件,把他存储到list中
sb.append(" and "+k+" like ? "); //存储拼接的sql语句
list.add("%"+val+"%"); //将对应的map值存储到list中,查询的条件值
}
}
//System.out.println(sb.toString());
//System.out.println(list);
sql=sb.toString(); //重写拼接后的sql
return jdbcTemplate.queryForObject(sql, Integer.class,list.toArray());
}
@Override
public List<User> findByPage(int s, int row) {
// 分页查询每个分页的记录
String sql="select * from user limit ?,?";
List<User> list=jdbcTemplate.query(sql, new BeanPropertyRowMapper<User>(User.class),s,row);
return list;
}
//模糊查询每个页的记录
@Override
public List<User> findByPage(int s, int row, Map<String, String[]> condtion) {
//模糊查询每个页的记录
String sql="select * from user where 1=1 ";
//2.遍历map集合,用stringBuilder存储拼接的sql语句,list存储map的值
StringBuilder sb=new StringBuilder(sql);
List<Object> list=new ArrayList<Object>();
Set<String> key=condtion.keySet();
//System.out.println(key);
for(String k:key) {
//排除分页的currentPage,rows请求的键值
if("currentPage".equals(k)||"rows".equals(k)) {
continue;
}
//获取value
String val=condtion.get(k)[0];
//判断是否有值
if(val != null&&!"".equals(val)) {//如果有且不能空字符串,则是查询条件,把他存储到list中
sb.append(" and "+k+" like ? "); //存储拼接的sql语句
list.add("%"+val+"%"); //将对应的map值存储到list中,查询的条件值
}
}
//添加分页的sql语句
sb.append(" limit ?,? ");
//添加分页的参数
list.add(s); //添加每页的开始页码
list.add(row); //添加每页的记录数
System.out.println(sb.toString());
System.out.println(list);
sql=sb.toString(); //重写拼接后的sql
List<User> users=jdbcTemplate.query(sql, new BeanPropertyRowMapper<User>(User.class),list.toArray());
return users;
}
}
2.5删除后跳转到重新查询所有用户的servlet
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1.设置编码
req.setCharacterEncoding("utf-8");
//批量选中删除
//2.获得前端选中的所有删除项的id
String[] ids=req.getParameterValues("uid");
USerService uSerService=new UserServiceImpl();
uSerService.delselecteduser(ids); //传进去的是id数组
//3.跳转到查询所有的用户的jsp页面
resp.sendRedirect(req.getContextPath()+"/finduserpageservlet");
}
至此,删除选中功能功能全部结束
三.其他
一键全选或一键全不选功能实现
在list.jsp页面绑定checkbox一键全选
js处理一键全选,一键全不选
更多推荐
已为社区贡献10条内容
所有评论(0)