第五阶段-尚硅谷书城案例第二部分

2、接第一部分

2.5.2、 添加图书

分析:
在这里插入图片描述
在这里插入图片描述
代码实现

  1. 在book_manager.jsp 页面 修改 添加图书的a标签的跳转界面,修改为
<td><a href="pages/manager/book_edit.jsp">添加图书</a></td>
  1. 动态获取添加的图书信息
<c:forEach items="${requestScope.books}" var="books">
				<tr>
					<td>${books.name}</td>
					<td>${books.price}</td>
					<td>${books.author}</td>
					<td>${books.sales}</td>
					<td>${books.stock}</td>
					<td><a href="manager/bookServlet?action=getBook&id=${books.id}">修改</a></td>
					<td><a class="deleteClass" href="manager/bookServlet?action=delete&id=${books.id}">删除</a></td>
				</tr>

			</c:forEach>
  1. 在book_edit.jsp 界面 修改提交后的跳转界面为manager/bookServlet 并添加 请求方法为 get
<form action="manager/bookServlet" method="get">
  1. 写一个输入框的隐藏域
<input type="hidden" name="action" value="add" />

其中,通过action 来判断 要调用的方法,现在是要添加图书,所以给value 赋值 add

 protected void add(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.获取请求的参数 == 封装成为Book对象
        Book book = WebUtils.copyParamToBean(req.getParameterMap(), new Book());
        //2.调用BookService.addBook()保存图书
        bookService.addBook(book);
        //3.跳到图书列表页面
//        req.getRequestDispatcher("/manager/bookServlet?action=list").forward(req,resp);
        //重定向
        resp.sendRedirect(req.getContextPath() + "/manager/bookServlet?action=list");
    }

tip: 请求转发是一次请求,重定向是两次请求,使用请求转发的话,用户按F5 页面的缓存还会再执行一次,添加的数据就有两条,所以得用重定向。
重定向后还要刷新页面,所以要在后面加上?action=list

这里使用了WebUtils.copyParamToBean 工具类,具体代码如下:

public class  WebUtils {
    /**
     * 把Map中的值注入到对应的JavaBean属性中
     * @param value
     * @param bean
     */
    public static <T> T copyParamToBean(Map value, T bean){
        try {
            System.out.println("注入之前:" + bean);
            /*
            * 把所有的请求参数都注入到 user对象中
            */
            BeanUtils.populate(bean,value);
            System.out.println("注入之后:" + bean);
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
        return bean;
    }
 }
2.5.3、删除图书

分析
在这里插入图片描述
代码实现:

  1. 在book_manager.jsp 页面 修改 删除 a标签的跳转界面为 manager/bookServlet 并在后面传入 BookServlet页面要使用的方法 delete,delete是通过id来删除所以把 id属性也传入
	<td><a  href="manager/bookServlet?action=delete&id=${books.id}">删除</a></td>
  1. 在 BookServlet 页面 实现 delete 方法
    (1)获取请求的参数 id,图书编号
    (2)调用bookService.deleteBookById();删除图书
    (3)重定向回图书列表管理的页面
 protected void delete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.获取请求的参数id,图书编号
       /* String id = req.getParameter("id");
        int i = 0;
        try {
            i = Integer.parseInt(id);
        } catch (NumberFormatException e) {
            e.printStackTrace();
        }*/
        int id = WebUtils.parseInt(req.getParameter("id"), 0);
        //2.调用bookService.deleteBookById();删除图书
        bookService.deleteBookById(id);
        //重定向回图书列表管理的页面
        // /manager/bookServlet?action=list
        resp.sendRedirect(req.getContextPath() + "/manager/bookServlet?action=list");

    }

WebUtils.parseInt 工具类

  /**
     * 将字符串转换成为int类型数据
     * @param strInt
     * @param defaultValue
     * @return */
    public static int parseInt(String strInt,int defaultValue){
        try {
            return Integer.parseInt(strInt);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return defaultValue;
    }
  1. 这时删除时,出现新问题:点击删除没有提示框,解决:
    (1)在book_manager 页面,给 删除 a标签添加一个 deleteClass类,制作点击事件
	<td><a class="deleteClass" href="manager/bookServlet?action=delete&id=${books.id}">删除</a></td>

(2)在book_manager 页面头部写一个 js方法,通过deleteClass类 绑定 删除 a标签 负责弹出提示框

<script type="text/javascript">

		$(function () {
			$("a.deleteClass").click(function () {

				return confirm("确定要"+ $(this).parent().parent().find("td:first").text() +"删除吗");

			});
		});
	</script>

tip : $(function () { } 是初始化,confirm() 的值 是 布尔类型 ,this 就是当前操作的对象 就是 删除 a标签

2.5.4、修改图书

分析:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

实现:

  1. 在BookServlet页面中写一个 getBook 方法,获取要修改的图书信息
protected void getBook(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    }
  1. 修改book_manager.jsp 的 删除a标签跳转界面为:
<td><a href="manager/bookServlet?action=getBook&id=${books.id}">修改</a></td>

并将 要调用的方法和图书的id属性也传过去

  1. 实现getBook业务
    (1)获取图书编号
    (2)调用BookService.queryBookByid(id),得到要修改的图书信息
    (3)把图书保存到Request 域中
    (4)请求转发到/pages/manager/book_edit.jsp 页面

将修改图书信息并将修改完的 信息 带回表单中 去显示

protected void getBook(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
      //1.获取请求的参数图书编号
        int id = WebUtils.parseInt(req.getParameter("id"), 0);
        //2.调用bookService.queryBookById 查询图书
        Book book = bookService.queryBookById(id);
        //3.将图书信息保存到 request 域中
        req.setAttribute("book",book);
        //4.请求转发给 pages/manager/book_edit.jsp 页面
        req.getRequestDispatcher("/pages/manager/book_edit.jsp").forward(req,resp);
    }

WebUtils.parseInt 工具类

  /**
     * 将字符串转换成为int类型数据
     * @param strInt
     * @param defaultValue
     * @return */
    public static int parseInt(String strInt,int defaultValue){
        try {
            return Integer.parseInt(strInt);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return defaultValue;
    }
  1. 将book_edit中图书的内容用EL表达式动态获取
	<tr>
		    <td><input name="name" type="text" value="${requestScope.book.name}"/></td>
			<td><input name="price" type="text" value="${requestScope.book.price}"/></td>
			<td><input name="author" type="text" value="${requestScope.book.author}"/></td>
			<td><input name="sales" type="text" value="${requestScope.book.sales}"/></td>
			<td><input name="stock" type="text" value="${requestScope.book.stock}"/></td>
			<td><input type="submit" value="提交"/></td>
	</tr>	
  1. 在BookServlet 页面 写一个 update(HttpServletRequest req, HttpServletResponse resp) 用来保存修改图书的操作
 protected void update(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.获取请求的参数==封装成为Book对象
        Book book = WebUtils.copyParamToBean(req.getParameterMap(), new Book());
        //2.调用 BookService.updateBook(book);修改图书
        bookService.updateBook(book);
        //3.重定向回图书列表管理页面
        resp.sendRedirect(req.getContextPath() +"/manager/bookServlet?action=list");

    }

这里刷新页面:在bookServlet后面加上?action=list,用list方法来刷新页面

  1. 一个表单调用BookServlet中两个方法,要判断一下不同方法在何时被调用
<input type="hidden" name="action" value="${empty param.id ?"add":"update"}" />
  1. 在这里发现问题, bookService.updateBook(book);方法是根据 id 属性查找要修改的图书信息,但是现在并没有 id属性,所以在 book_edit 表单中 把 id 传入 request 域中
<input type="hidden" name="id" value="${requestScope.book.id}" />
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值