Day14_JavaWeb——获取要修改的图书数据并显示

一. 储备知识

实现管理员修改图书的功能的设计思想:

1.1 在book_manager.jsp页面中点击修改超链接应将修改标签所在的图书数据(包括id)携带到book_edit.jsp

(1)方案1:将图书数据拼接在修改超链接后
(2)方案2:修改超链接提交请求给BookManagerServlet并且提交要修改图书的id,BookManagerServlet根据id查询要修改的图书对象然后存到域中,再转发到book_edit.jsp

  1. BookManagerServlet中提供根据id查询图书对象的请求方法[getBook()]
  2. 在BookService中提供查询图书的业务方法[Book getBook(String bookId)]
  3. 在book_edit.jsp页面中获取要修改的图书数据显示
  4. 修改book_manager.jsp页面中的修改超链接

1.2 book_edit.jsp页面中用户修改了图书数据后点击提交请求给BookManagerServlet处理(updateBook)

  1. 在BookManagerServlet中提供修改图书数据的请求方法[updateBook()]
  2. 修改book_edit.jsp表单提交的地址为BookManagerServlet

1.3 BookService中提供根据id修改图书的业务方法

  1. 在BookService中提供处理修改图书的业务方法[updateBook()]

二. 源码例子

BookManagerServlet.java

package com.atguigu.bookstore.servlet;

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 com.atguigu.bookstore.bean.Book;
import com.atguigu.bookstore.service.BookService;
import com.atguigu.bookstore.service.impl.BookServiceImpl;
import com.atguigu.bookstore.utils.WebUtils;

/**
 * Servlet implementation class BookManagerServlet
 */
public class BookManagerServlet extends BaseServlet {
	private static final long serialVersionUID = 1L;
    private BookService service = new BookServiceImpl();
   
    /**
     * 处理修改图书的请求
     * @param request
     * @param response
     * @throws ServletException
     * @throws IOException
     */
    protected void updateBook(HttpServletRequest request, HttpServletResponse response)
    		throws ServletException, IOException {
         //1.获取修改后的图书数据
    	 Book book = WebUtils.params2Bean(new Book(), request);//book的id在数据库中一定会对应一本图书
    	 //2.调用service处理修改业务
    	 boolean b = service.updateBook(book);
    	 //3.根据处理结果给用户响应
    	 //跳转到图书显示的页面
    	 response.sendRedirect(request.getContextPath()+"/BookManagerServlet?type=getAllBooks");
    }
    
    /**
          * 查询指定图书
     * @param request
     * @param response
     * @throws ServletException
     * @throws IOException
     */
    protected void getBook(HttpServletRequest request, HttpServletResponse response)
    		throws ServletException, IOException {
    	// TODO Auto-generated method stub
    	//1.获取请求参数
    	String bookId = request.getParameter("bookId");
    	//2.调用service处理业务
    	Book book = service.getBook(bookId);
    	//3.将book对象存到域中共享
    	request.setAttribute("book", book);
    	//4.转发到修改图书的页面
    	request.getRequestDispatcher("/pages/manager/book_edit.jsp").forward(request, response);
    
    }
 
    
    
	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void getAllBooks(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		//1.获取请求参数
		//2.调用其他类处理业务
		List<Book> list = service.getAllBooks();
		//将数据存到域中共享
		request.setAttribute("list", list);
		//3.给用户响应[转发(使用request域进行转发)、重定向、response对象向响应体写入内容]
		//将集合数据交给book_manager.jsp页面显示
		//转发到book_manager.jsp
		request.getRequestDispatcher("/pages/manager/book_manager.jsp").forward(request, response);
	}
   
	
}

BookService.java

package com.atguigu.bookstore.service;

import java.util.List;

import com.atguigu.bookstore.bean.Book;
import com.atguigu.bookstore.bean.Page;

/**
 * 规定对图书操作的业务方法
 * @author user
 *
 */
public interface BookService {
       /**
        * 查询所有的图书集合
        */
	   List<Book> getAllBooks();
	   /**
	    * 删除图书的业务方法
	    * @return 
	    */
	   boolean deleteBook(String bookId);
	   /**
	    * 添加图书的业务方法
	    */
	    boolean addBook(Book book);
	    /**
	     * 查询指定图书的业务方法
	     * @return 
	     */
	    Book getBook(String bookId);
	    /**
	     * 修改指定图书数据的方法
	     *   book参数,携带了id和修改后的图书数据
	     * @return 
	     */
	    boolean updateBook(Book book);
	    /**
	     * 查询分页的业务方法
	     * @param pageNumber
	     * @param size
	     * @return
	     */
	    Page<Book> getPage(String pageNumber, int size);
}

BookServiceImpl.java

package com.atguigu.bookstore.dao.impl;

import java.util.List;

import com.atguigu.bookstore.bean.Book;
import com.atguigu.bookstore.bean.Page;
import com.atguigu.bookstore.dao.BaseDao;
import com.atguigu.bookstore.dao.BookDao;

public class BookDaoImpl extends BaseDao implements BookDao{

	@Override
	public List<Book> getAllBooks() {
		// TODO Auto-generated method stub
		String sql = "select id, title, author, price, sales, stock, img_path imgPath"
				     + " from book";
		return getBeanList(Book.class, sql);
	}

	@Override
	public Book getBookById(String bookId) {
		// TODO Auto-generated method stub
		String sql = "select id, title, author, price, sales, stock, img_path imgPath"
				      + " from book where id = ?";
		return getBean( Book.class, sql, bookId);
	}

	@Override
	public int saveBook(Book book) {
		// TODO Auto-generated method stub
		String sql = "insert into book(title, author, price, sales, stock, "
				     + "img_path ) values(?, ?, ?, ?, ?, ?)";
		return update(sql, book.getTitle(), book.getAuthor(), book.getPrice(), book.getSales(),
				       book.getStock(), book.getImgPath());
	}


	@Override
	public int updateBookById(Book book) {
		// TODO Auto-generated method stub
		String sql = "update book set title=?, author=?, price=?, sales=?, stock=?,"
				     + " img_path=? where id = ?";
		return update(sql, book.getTitle(), book.getAuthor(), book.getPrice(), book.getSales(),
				       book.getStock(), book.getImgPath(), book.getId());
	}


}

book_manager.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>图书管理</title>
<%@ include file="/WEB-INF/include/base.jsp" %>
<script type="text/javascript">
     /*给删除超链接绑定删除事件*/
     $(function(){
         $(".delA").click(function(){
                //由于a标签遍历显示图书时会产生多个,所以不能使用id属性
                //获取被点击的a标签所在行的第一个单元格的文本内容,即a标签的爹(td标签)的爹(tr标签)的第一个儿子(即tr中的第一个td标签)
                //this为a标签的dom对象,$(this)为将dom对象转换为jquery对象
                var title = $(this).parents("tr").children("td:eq(0)").text();
                if(! confirm("你真的要删除《" + title + "》吗?")){
                     //取消删除,阻止a标签的默认行为
                    return false;  
                }
             });
         });
</script>
</head>
<body>
             <div id="header">
			        <div class="logo_content">
				         <div class="logo_img">
					          <img src="static/img/baozhatanglogo.jpg" alt="" width="30px">
				         </div>
					      <span>欢迎来到一流爆炸糖书城</span>
			        </div>
			        <div class="header_content">
				          <a href="">设置</a> |
				          <a href="">退出</a>
			        </div>
		      </div>
		      
		      <div id="main">
		          <c:choose>
		                <c:when test="${empty requestScope.list }">
		                <%-- ${empty requestScope.list } 判断查询所有的图书集合 --%>
		                      <h3 style="color:red; text-align:center; margin-top: 150px;">没有图书数据!赶紧去添加吧!<a href="pages/manager/book_add.jsp">添加图书</a></h3>
		                </c:when>
		                <c:otherwise>
		                    <table>
		                         <tr>
		                             <td>名称</td>
		                             <td>价格</td>
		                             <td>作者</td>
		                             <td>销量</td>
		                             <td>库存</td>
		                             <td colspan="2">操作</td>
		                         </tr>
		                         <!-- 遍历图书集合,每本图书数据对应一行显示 -->
		                         <c:forEach items="${list }" var="book">
		                             <td>${book.title }</td>
		                             <td>${book.price }</td>
		                             <td>${book.author }</td>
		                             <td>${book.sales }</td>
		                             <td>${book.stock }</td>
		                             <td><a href="BookManagerServlet?type=getBookbookId=${book.id }">修改</a></td>
		                             <td><a class="delA" href="BookManagerServlet?type=deleteBook&bookId=${book.id }">删除</a></td>
		                         </c:forEach>
		                         <tr>
		                             <td></td>
		                             <td></td>
		                             <td></td>
		                             <td></td>
		                             <td></td>
		                             <td></td>
		                             <td><a href="pages/manager/book_add.jsp">添加图书</a></td>
		                         </tr>
		                    </table>
		                </c:otherwise>
		          </c:choose>
		      </div>
		      
      <div id="bottom">
          <span>
                          一流爆炸糖书城.Copyright &copy;2019
          </span>
      </div>
</body>
</html>

book_edit.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>编辑图书</title>
</head>
<body>
        <div id="header">
			<img class="logo_img" alt="" src="static/img/baozhatanglogo.jpg" >
			<span class="wel_word">编辑图书</span>
			<%@ include file="/WEB-INF/include/manager_header.jsp" %>
		</div>
		
		<div id="main">
		    <form action="BookManagerServlet" method="post">
		          <input type="hidden" name="type" value="updateBook">
		          <!-- 通过隐藏域将数据交给服务器的updateBook方法 -->
		          <input type="hidden" name="ref" value="${ref }">
		          <!-- 修改图书数据时需要使用图书id name属性值必须和Book类的属性一样-->
		          <input type="hidden" name="id" value="${requestScope.book.id }">
		          <input type="hidden" name="imgPath" value="${requestScope.book.imgPath }">
		          <table>
		               <tr>
		                   <td>名称</td>
		                   <td>价格</td>
		                   <td>作者</td>
		                   <td>销量</td>
		                   <td>库存</td>
		                   <td colspan="2">操作</td>
		               </tr>
		               <tr>
		                   <td><input name="title" type="text" value="${requestScope.book.title }"></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>
		          </table>
		    </form>
		</div>
		
		
		  <div id="bottom">
          <span>
                          一流爆炸糖书城.Copyright &copy;2019
          </span>
      </div>
</body>
</html>
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值