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> <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">«</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">»</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博客