图书修改没有实现
<%@ page contentType="text/html; charset=UTF-8"%>
<%
String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
+ request.getContextPath();
%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>图书后台管理</title>
<link rel="stylesheet" href="css/index.css">
<link rel="stylesheet" href="css/bootstrap.min.css">
</head>
<body>
<header>
<div class="container">
<nav>
<a href="bookList.jsp">图书信息管理</a>
</nav>
<nav>
<a href="categoryList.jsp">分类管理</a>
</nav>
</div>
</header>
<section class="banner">
<div class="container">
<div>
<h1>图书管理系统</h1>
<p>图书信息管理</p>
</div>
</div>
</section>
<section class="main">
<div class="container">
<form class="form-horizontal" action="/searchBook" method="post">
<div class="form-group" style="float: right;">
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" class="btn btn-primary">查询</button>
</div>
</div>
<div class="form-group" style="float: right; width: 300px;">
<div class="col-sm-8">
<input name="searchContent" class="form-control"
id="searchContent" placeholder="输入要查询的分类" style="width: 250px">
</div>
</div>
</form>
</div>
<div class="container">
<table class="table table-striped">
<thead>
<tr>
<th>序号</th>
<th>图书编号</th>
<th>图书名称</th>
<th>分类</th>
<th>价格</th>
<th>图书封面</th>
<th>备注</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<c:forEach items="${requestScope.books}" var="book" varStatus="idx">
<!--
<tr id="tr1">
<td>1</td>
<td>book0001</td>
<td>Java基础</td>
<td>计算机类</td>
<td>¥29</td>
<td><img src="img/g1.jpg"></td>
<td>
<a href="/updateBook?bookId=book0001">修改</a>
<a href="/deleteBook?bookId=book0001">删除</a>
</td>
在循环显示数据时,此处的book0001可以用EL表达式进行替换
</tr>
-->
<tr>
<td>${idx.index+1}</td>
<td>${book.bookId}</td>
<td>${book.bookName}</td>
<td>${book.bookCategory}</td>
<td>${book.bookPrice}</td>
<td><img src=${book.bookPath }></td>
<td>${book.bookRemarks}</td>
<td>
<!-- href="<%=basePath%>/ToUpdateBookServlet?bookId=${book.bookId}">修改-->
<a
href="${pageContext.request.contextPath }/ToUpdateBookServlet?bookId=${book.bookId}">修改</a>
<a
href="${pageContext.request.contextPath }/DeleteBookServlet?bookId=${book.bookId}">删除</a>
</td>
<!--在循环显示数据时,此处的ca0001可以用EL表达式进行替换-->
</tr>
</c:forEach>
</tbody>
</table>
</div>
</section>
<script type="text/javascript">
$("#search").click(function(){
//单击按钮的时候触发Ajax事件
$.ajax({
"url":"<%=basePath%>/book_list1",
"data" : {
title : $("input[name=bookCategory]").val()
},
"type" : "post",
"dataType" : "json",
"success" : function(json) {
var content = "";
for (var i = 0; i < json.length; i++) {
content = content + "<tr><td>" + json[i].bookId
+ "</td><td>" + json[i].bookName
+ "</td><td>" + json[i].bookCategory
+ "</td><td>" + json[i].bookPrice
+ "</td><td>" + <img src=json[i].bookPath>
+"</td><td>" +json[i].bookRemarks
+ "</td></tr>";
$("#cont>tr").remove();
}
$("#cont").html(content);//设置cont也就是<tbody>中的内容
}
});
});
</script>
<section class="page">
<div class="container">
<div id="fatie">
<a href="${pageContext.request.contextPath}/ToAddBookServlet"><button>新建</button></a>
</div>
</div>
</section>
<footer> copy@慕课网 </footer>
</body>
</html>
+++++++++++++++++++
package com.imooc.servlet;
import java.io.IOException;
import java.util.List;
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 com.imooc.domain.Book;
import com.imooc.domain.Category;
import com.imooc.service.impl.BookServiceImpl;
import com.imooc.service.impl.CategoryServiceImpl;
@WebServlet("/ToUpdateBookServlet")
public class ToUpdateBookServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public ToUpdateBookServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取页面提交的图书Id
String bookId=request.getParameter("bookId");
//处理数据
// Book book=BookServiceImpl.getBooksById(bookId);
BookServiceImpl book=new BookServiceImpl();
book.getBooksById(bookId);
// List<Book> book1=BookServiceImpl.getBooks();
List<Category> categoryList=CategoryServiceImpl.getCategorydb();
request.setAttribute("book", book);
request.setAttribute("categoryList",categoryList);
//跳转到图书修改页面updateBook.jsp
request.getRequestDispatcher("/updateBook.jsp").forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
++++++++++++++++++++++++++++
package com.imooc.service.impl;
import java.util.ArrayList;
import java.util.List;
import com.imooc.domain.Book;
import com.imooc.service.BookService;
public class BookServiceImpl implements BookService {
private static final List<Book> books=new ArrayList<Book>();
@Override
public void addBook(Book book) {
books.add(book);
System.out.println("添加图书后的图书集合");
System.out.println(books);
}
@Override
public void updateBook(Book book) {
books.add(book);
}
@Override
public void deleteBook(String bookId) {
for(Book book:books) {
if(book.getBookId().equals(bookId)) {
books.remove(book);
break;
}
}
System.out.println("测试输出删除图书后的信息");
System.out.println(books);
}
@Override
public Book getBooksById(String bookId) {
Book book=null;
for(Book b:books) {
if(b.getBookId().equals(bookId)) {
book=b;
break;
}
}
return book;
}
@Override
public List<Book> getBooksByCatgoryName(String categoryName) {
//用于存储符合条件的书的集合
List<Book> list1=new ArrayList<Book>();
//利用循环查询相同的书名
for(Book bookList:books) {
bookList.getBookCategory().equals(categoryName);
list1.add(bookList);
break;
}
return list1;
}
public static List<Book> getBooks() {
return books;
}
}
+++++++++++++++++++++++++++
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>修改图书信息</title>
<link rel="stylesheet" href="css/bootstrap.min.css">
<link rel="stylesheet" href="css/add.css">
</head>
<body>
<nav class="navbar navbar-default">
<div class="container">
<div class="navbar-header">
<a class="navbar-brand" href="/dept/list.do"> 图书信息管理 </a>
</div>
</div>
</nav>
<div class="container">
<div class="jumbotron">
<h1>Hello, ${existUser.username}!</h1>
<p>请小心的修改图书信息。。。</p>
</div>
<div class="page-header">
<h3>
<small>修改</small>
</h3>
</div>
<form class="form-horizontal" enctype="multipart/form-data"
action="${pageContext.request.contextPath }/UpdateBookServlet"
method="post">
<div class="form-group">
<label for="bookId" class="col-sm-2 control-label">图书编号 :</label>
<div class="col-sm-8">
<input name="bookId" class="form-control" id="bookId"
readonly="readonly" value="${book.bookId}">
</div>
</div>
<div class="form-group">
<label for="bookName" class="col-sm-2 control-label">图书名称 :</label>
<div class="col-sm-8">
<input name="bookName" class="form-control" id="bookName">
</div>
</div>
<div class="form-group">
<label for="categoryId" class="col-sm-2 control-label">分类 :</label>
<select id="categoryId" name="categoryId"
class="col-sm-2 form-control"
style="width: auto; margin-left: 15px">
<!-- <option value="ca0001" selected="">计算机</option>
<option value="ca0002">文学</option>
<option value="ca0003">历史</option>
下拉列表的内容要从分类中进行读取,value值是分类id -->
<c:forEach items="${requestScope.categorys}" var="category"
varStatus="idx">
<option value="${category.categoryId}" selected="">${category.categoryName}</option>
</c:forEach>
</select>
</div>
<div class="form-group">
<label for="bookPrice" class="col-sm-2 control-label">价格 :</label>
<div class="col-sm-8">
<input name="bookPrice" class="form-control" id="bookPrice">
</div>
</div>
<div class="form-group">
<label for="bookPic" class="col-sm-2 control-label">图书封面 :</label> <input
type="file" id="bookPic" name="bookPic" style="padding-left: 15px">
</div>
<div class="form-group">
<label for="remarks" class="col-sm-2 control-label">备注 :</label>
<div class="col-sm-8">
<input name="remarks" class="form-control" id="remarks">
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" class="btn btn-primary">修改</button>
</div>
</div>
</form>
</div>
<footer class="text-center"> copy@imooc </footer>
</body>
</html>
+++++++++++++++++++++++++++++++++++++
package com.imooc.servlet;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
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 org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import com.imooc.domain.Book;
import com.imooc.service.impl.BookServiceImpl;
import com.imooc.utils.UploadUtils;
/**
* Servlet implementation class UpdateBookServlet
*/
@WebServlet("/UpdateBookServlet")
public class UpdateBookServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public UpdateBookServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 接收数据
// 创建Map集合保存数据
Map<String, String> map = new HashMap<String, String>();
// 文件上传代码
// 1、创建磁盘文件项工厂
DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
// 2、创建核心解析类
ServletFileUpload fileupload = new ServletFileUpload(diskFileItemFactory);
// 3、解析请求对象,将请求分成几个部分(FileItem)
try {
List<FileItem> list = fileupload.parseRequest(request);
// 4、遍历集合获得每个部分的对象
for (FileItem fileItem : list) {
// 判断是普通项还是文件上传项
if (fileItem.isFormField()) {
// 普通项--图书ID,图书名字、图书种类、图书备注、图书价格
// 获得普通项的名称
String name = fileItem.getFieldName();
// 获得普通项的值
String value = fileItem.getString("UTF-8");
// 保存数据
map.put(name, value);
System.out.println(name + " " + value);
} else {
// 文件上传项
// 获得文件名称:
String fileName = fileItem.getName();
// 获得唯一文件名
String uuidFilename = UploadUtils.getUuidFileName(fileName);
// 获得文件输入流
InputStream is = fileItem.getInputStream();
// 需要将文件写入某个服务器路径即可
String path = getServletContext().getRealPath("/upload");
System.out.println(path);
// 显示图片<img src="路径">
String url = path + "\\" + uuidFilename;
map.put("path", request.getContextPath() + "/upload/" + uuidFilename);
// 创建输入流与输出流对接
OutputStream os = new FileOutputStream(url);
int len = 0;
byte[] b = new byte[1024];
while ((len = is.read(b)) != -1) {
os.write(b, 0, len);
}
is.close();
os.close();
}
}
} catch (FileUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 封装数据
Book book=new Book();
book.setBookId(map.get("bookId"));
book.setBookName(map.get("bookName"));
book.setBookCategory(map.get("categoryId"));
book.setBookPrice(Double.parseDouble(map.get("bookPrice")));
book.setBookPath(map.get("path"));
book.setBookRemarks(map.get("remarks"));
System.out.println(book);
// 处理数据
BookServiceImpl bookList=new BookServiceImpl();
bookList.updateBook(book);
// 获取集合bookList
request.setAttribute("books",bookList.getBooks() );
System.out.println(bookList.getBooks());
// 显示数据处理结果,跳转至bookList.jsp
request.getRequestDispatcher("/bookList.jsp").forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
++++++++++++++++++++++++++
package com.imooc.domain;
public class Book {
// 图书ID
private String bookId;
// 图书名字
private String bookName;
// 图书分类
private String bookCategory;
// 图书价格
private double bookPrice;
// 图书封面上传路径
private String bookPath;
// 图书备注
private String bookRemarks;
// 无参构造方法
public Book() {
super();
}
// 带参构造方法
public Book(String bookId, String bookName, String bookCategory, double bookPrice, String bookPath,
String bookRemarks) {
super();
this.bookId = bookId;
this.bookName = bookName;
this.bookCategory = bookCategory;
this.bookPrice = bookPrice;
this.bookPath = bookPath;
this.bookRemarks = bookRemarks;
}
public String getBookId() {
return bookId;
}
public void setBookId(String bookId) {
this.bookId = bookId;
}
public String getBookName() {
return bookName;
}
public void setBookName(String bookName) {
this.bookName = bookName;
}
public String getBookCategory() {
return bookCategory;
}
public void setBookCategory(String bookCategory) {
this.bookCategory = bookCategory;
}
public double getBookPrice() {
return bookPrice;
}
public void setBookPrice(double bookPrice) {
this.bookPrice = bookPrice;
}
public String getBookPath() {
return bookPath;
}
public void setBookPath(String bookPath) {
this.bookPath = bookPath;
}
public String getBookRemarks() {
return bookRemarks;
}
public void setBookRemarks(String bookRemarks) {
this.bookRemarks = bookRemarks;
}
@Override
public String toString() {
return "Book [bookId=" + bookId + ", bookName=" + bookName + ", bookCategory=" + bookCategory + ", bookPrice="
+ bookPrice + ", bookPath=" + bookPath + ", bookRemarks=" + bookRemarks + "]";
}
}
正在回答 回答被采纳积分+1
同学你好,测试同学的代码,报el表达式错误,如:

在ToUpdateBookServlet中,应该是将查询出现的book类对象存放到request中,转发到页面显示,并不是将BookServiceImpl对象存入。如:

另外在ToUpdateBookServlet类中,存入request中的分类信息是categoryList,在jsp页面中获取分类信息时,需要使用categoryList,而不是categorys。
点击修改后,添加图书信息,在BookServiceImpl类中,updateBook方法调用添加的方法,如:

这里应该是判断传入的id和books中的id是否相同,如果相同,删除原来的,添加新增的。
祝:学习愉快~
- 参与学习 人
- 提交作业 676 份
- 解答问题 9666 个
本阶段将从前端网页搭建入手,到Java Web基础,前后端结合助你完成Java Web小白的蜕变!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星