0.引言

前面文章已经实现了登录,查询,添加等功能,本篇文章在前面的基础上继续实现修改和删除功能。

一.分析

删除功能分析

1.在前端jsp页面上需要绑定要删除记录的id参数(这里用id=${user.id}来绑定,因为用户的id是主键),然后将这个参数提交到DelUserServlet中处理。

2.在DelUserServlet中:①获取传过来的参数id; ②通过调用service按id进行删除用户;③删除后跳转到查询所有用户的servlet

3.useService,以及userDao中方法的编写

二.list.jsp页面

<%@ 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;
        }
    </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">
            <div class="form-group">
                <label for="exampleInputName2">姓名</label>
                <input type="text" class="form-control" id="exampleInputName2" >
            </div>
            <div class="form-group">
                <label for="exampleInputName3">籍贯</label>
                <input type="text" class="form-control" id="exampleInputName3" >
            </div>

            <div class="form-group">
                <label for="exampleInputEmail2">邮箱</label>
                <input type="email" class="form-control" id="exampleInputEmail2"  >
            </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="${list}" var="user" varStatus="s">
	               <tr>
	                    <td><input type="checkbox"  name="uid"  value="${user.id}"></td>
			            <td>${s.count}</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>&nbsp;<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">
                <li>
                    <a href="#" aria-label="Previous">
                        <span aria-hidden="true">&laquo;</span>
                    </a>
                </li>
                <li><a href="#">1</a></li>
                <li><a href="#">2</a></li>
                <li><a href="#">3</a></li>
                <li><a href="#">4</a></li>
                <li><a href="#">5</a></li>
                <li>
                    <a href="#" aria-label="Next">
                        <span aria-hidden="true">&raquo;</span>
                    </a>
                </li>
                <span style="font-size: 25px;margin-left: 5px;">
                    共16条记录,共4页
                </span>
                

            </ul>
        </nav>
    </div>
</div>
</body>
</html>

其中: <a class="btn btn-default btn-sm" href="javascript:deluser(${user.id});" >删除</a></td>  

function deluser(i) {
             //用户安全提示
            if(confirm("您确定需要删除吗?")){
                location.href="${pageContext.request.contextPath }/delUserServlet?id="+i;
            }
        }

>>js增加在删除前提示功能

>>在跳转页面栏上绑定了用户id

三.编写DelUserServlet

package web.servlet;

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("/delUserServlet")
public class DelUserServlet 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");
		String id=req.getParameter("id");
		//System.out.println(id);
		//2.调用service
		USerService uSerService=new UserServiceImpl();
		uSerService.deluser(id);
		
		//3.调转到重新查询的servlet
		resp.sendRedirect(req.getContextPath()+"/userListServlet");
		
	}
	

}

四.在service层中的UserService接口,UserServiceImpl实现类分别编写deluser抽象方法和adduser具体实现方法。

package service;
//user的业务接口

import java.util.List;

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);

	
}
package service;

import java.util.List;

import dao.UserDao;
import dao.UserDaoImpl;
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
			}
		}	
	}
    

}

五.在Dao层中UserDao接口,UserDaoImpl实现类分别编写deluser抽象方法和deluser具体实现方法。

package dao;

import java.util.List;

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);
 
}
package dao;

import java.util.List;

import javax.xml.transform.Templates;

import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;

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.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());		
	}
	
	
}

六.删除成功后,重新跳转到查询所有用户的页面

     resp.sendRedirect(req.getContextPath()+"/userListServlet");  (在步骤3中最后重新跳回到查询所有的servlet)

其他:

删除某条记录时,客户端需要绑定该记录的id,servlet根据它到数据库删除该记录。

》》下一篇:添加记录功能》》》添加记录功能--jsp,servl_笼中鸟-CSDN博客

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐