菜品修改有问题

菜品修改有问题

当列表里多个菜品信息,菜品修改后不能跳转到显示菜品信息界面,但是再去查询的时候发现修改成功;当列表里只有一条菜品信息时,就能跳转成功,感觉好迷呀

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//菜品修改
    public static void updateFood(Map<String,Food> map) {
        //boolean flag=true;
        Map<String,Food> map1 = null;
        for(Map<String,Food> m : db) {
            for(String key:m.keySet()){
                for(String k:map.keySet()) {
                    if(map.get(k).getId().equals(m.get(key).getId())) {
                        map1 = m;
                        break;
                    }
                }
                }
            db.remove(map1);
            db.add(map);
            }
    }
    
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
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.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.food.Food;
import com.imooc.food.FoodDaoImpl;
import com.imooc.utils.UploadUtils;
 
/**
 * 菜品修改的Servlet
 */
public class FoodUpdateServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 文件上传的基本操作
 
                try {
                    //定义一个map集合用于保存接收到的数据
                    Map<String,String> map = new HashMap<String,String>();
                    //定义一个map集合用于保存菜品信息
                    Map<String,Food> foodMap = new HashMap<String,Food>();
                    // 1、创建一个磁盘文件项工厂对象
                    DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
                    // 2、创建一个核心解析类
                    ServletFileUpload servletFileUpload = new ServletFileUpload(diskFileItemFactory);
                    // 3、解析request请求,返回list集合,list中存放FileItem对象
                    List<FileItem> list = servletFileUpload.parseRequest(request);
                    // 4、遍历集合,获得FileItem,判断是普通表单项还是文件上传项
                    String url=null;
                    for(FileItem fileItem:list) {
                        if(fileItem.isFormField()) {
                            //普通表单项
                            String name = fileItem.getFieldName();
                            String value = fileItem.getString("utf-8");
                            System.out.println(name+"     "+value);
                            map.put(name, value);
                        }else {
                            //文件上传项
                            //获得文件上传的名称
                            String fileName = fileItem.getName();
                            if(fileName!=null&& !"".equals(fileName)) {
                                //获得唯一的文件名
                                String uuidFileName = UploadUtils.getUUIDFileName(fileName);
                                //获得文件上传的数据
                                InputStream is = fileItem.getInputStream();
                                //获得路径
                                String path = this.getServletContext().getRealPath("/upload");
                                //将输入流对接到输出流
                                url = path+"//"+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();
                            }
                        }
                    }
                    //获得ServletContext对象
                    //FoodDaoImpl foodDaoImpl = new FoodDaoImpl();
                     
                    //List<Map<String,Food>> foodList = (List<Map<String, Food>>) this.getServletContext().getAttribute("list");
                     
                    List<Map<String,Food>> foodList = FoodDaoImpl.getAllFood();
                    //校验菜品id是否存在
                    List<Map<String,Food>> idList = FoodDaoImpl.getFoodById(map.get("id"));
                    if(idList.size()!=0) {
                        //将数据封装到food类中
                        Food food = new Food();
                        food.setId(map.get("id"));
                        food.setFoodName(map.get("foodName"));
                        food.setTaste(map.get("taste"));
                        food.setPrice(map.get("price"));
                        food.setDescription(map.get("description"));
                        food.setPath(url);
                        //将菜品信息存入到list集合中
                        foodMap.put(food.getId(), food);
                        //foodDaoImpl.addFood(foodMap);
                        FoodDaoImpl.updateFood(foodMap);
                        //this.getServletContext().setAttribute("list", foodList);
                        //添加成功,跳转到显示菜品信息页面
                        System.out.println("修改成功!");
                        //request.getSession().setAttribute("foodList", foodList);
                        response.sendRedirect(request.getContextPath()+"/showFoodList.jsp");
                    }else {
                        request.setAttribute("msg""该菜品id不存在!");
                        request.getRequestDispatcher("updateFood.jsp").forward(request, response);
                    }
                     
                catch (FileUploadException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
    }
 
     
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
 
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
    String path = request.getContextPath();
    String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
            + path;
%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>菜品修改(根据id修改)</title>
<style type="text/css">
 
</style>
</head>
<body>
    <center>
        <h1>根据菜品ID修改</h1>
        <%
            String msg="";
            if(request.getAttribute("msg")!=null){
                msg=(String)request.getAttribute("msg");
            }
        %>
        <h3><font color="red"><%= msg %></font></h3>
        <form action="<%= basePath %>/FoodUpdateServlet" method="post" enctype="multipart/form-data">
            <table border="1px" width="400px" cellspacing="0px" cellpadding="0px">
                <tr>
                    <td>修改ID</td>
                    <td><input type="text" name="id"></td>
                </tr>
                <tr>
                    <td>菜&nbsp;&nbsp;名</td>
                    <td><input type="text" name="foodName"></td>
                </tr>
                <tr>
                    <td>口&nbsp;&nbsp;味</td>
                    <td>
                        <input type="radio" name="taste" value="香辣">香辣
                        <input type="radio" name="taste" value="微辣">微辣
                        <input type="radio" name="taste" value="麻辣">麻辣
                        <input type="radio" name="taste" value="不辣">不辣
                    </td>
                </tr>
                <tr>
                    <td>菜品图片</td>
                    <td><input type="file" name="foodImage"></td>
                </tr>
                <tr>
                    <td>价&nbsp;&nbsp;格</td>
                    <td><input type="text" name="price"></td>
                </tr>
                <tr>
                    <td>菜品描述</td>
                    <td>
                        <textarea name="description"></textarea>
                    </td>
                </tr>
                <tr   style="text-align:center;width:20px">
                    <td colspan="2">
                        <input type="submit" value="修改">
                        <input type="reset" value="重置">
                    </td>
                </tr>
            </table>
        </form>
    </center>
</body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8" import="java.util.*,com.imooc.food.*"%>
<%
    String path = request.getContextPath();
    String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
            + path;
%>
<!DOCTYPE html>
<html>
<head>
<base href="/immocPro2">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>菜品信息展示</title>
<style type="text/css">
</style>
</head>
<body>
    <center>
        <h1>菜品查询</h1>
        <table border="1px" cellspacing="0px" cellpadding="0px" width="800px">
            <thead>
                <tr>
                    <th>菜品ID</th>
                    <th>菜名</th>
                    <th>口味</th>
                    <th>菜品图片</th>
                    <th>价格</th>
                    <th>菜品描述</th>
                </tr>
            </thead>
 
            <%
                //FoodDaoImpl foodDaoImpl = new FoodDaoImpl();
                //List<Map<String, Food>> list = (List<Map<String, Food>>)session.getAttribute("foodList");
                List<Map<String, Food>> list = FoodDaoImpl.getAllFood();
                if (list.size() != 0) {
                    for (Map<String, Food> map : list) {
                        for (String key : map.keySet()) {
                            int idx = map.get(key).getPath().lastIndexOf("//");
                            String fileName = map.get(key).getPath().substring(idx + 1);
            %>
            <tbody>
                <tr>
                    <td><%=map.get(key).getId()%></td>
                    <td><%=map.get(key).getFoodName()%></td>
                    <td><%=map.get(key).getTaste()%></td>
                    <td><img src="<%=basePath%>/upload/<%=fileName%>" /></td>
                    <td><%=map.get(key).getPrice()%></td>
                    <td><%=map.get(key).getDescription()%></td>
                </tr>
                <%
                    }
                        }
                    else {
                %>
                <h3>
                    <font color="red">当前列表为空!</font>
                </h3>
                <%
                    }
                %>
            </tbody>
        </table>
    </center>
</body>
</html>


正在回答

登陆购买课程后可参与讨论,去登陆

5回答

这是错误500的异常哦,500错误是代码出现了问题,错误原因是你在for循环中移除菜品信息了,所以会报错,建议你定义一个boolean类型的flag,默认值为false,当找到菜品信息时,将flag设置为true,然后在for循环外根据flag的值进行操作,祝学习愉快~

http://img1.sycdn.imooc.com//climg/5bbc5d600001788908870518.jpg

提问者 慕桂英8566455 2018-10-09 15:44:54

为什么我自己电脑上就不行啊,如图:http://img1.sycdn.imooc.com//climg/5bbc5c3700011f5410920486.jpg

而且后台也没有打印出“修改成功!”,可是再去菜品查询的时候发现信息已经被修改了

chrismorgen 2018-10-09 15:18:07

你好同学,测试了你的代码,当列表中存在多个菜品信息时,在修改菜品信息时,是可以跳转到菜品信息查询页面的,下图是测试之后的结果,祝学习愉快~

http://img1.sycdn.imooc.com//climg/5bbc558f0001767f09400740.jpg

提问者 慕桂英8566455 2018-10-09 14:21:50
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
package com.imooc.food;
 
public class Food {
    private String id;
    private String foodName;
    private String taste;
    private String path;
    private String price;
    private String description;
     
    public Food() {
         
    }
    public Food(String id, String foodName, String taste, String path, String price, String description) {
        super();
        this.id = id;
        this.foodName = foodName;
        this.taste = taste;
        this.path = path;
        this.price = price;
        this.description = description;
    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getFoodName() {
        return foodName;
    }
    public void setFoodName(String foodName) {
        this.foodName = foodName;
    }
    public String getTaste() {
        return taste;
    }
    public void setTaste(String taste) {
        this.taste = taste;
    }
    public String getPath() {
        return path;
    }
    public void setPath(String path) {
        this.path = path;
    }
    public String getPrice() {
        return price;
    }
    public void setPrice(String price) {
        this.price = price;
    }
    public String getDescription() {
        return description;
    }
    public void setDescription(String description) {
        this.description = description;
    }
    @Override
    public String toString() {
        return "Food [id=" + id + ", foodName=" + foodName + ", taste=" + taste + ", path=" + path + ", price=" + price
                ", description=" + description + "]";
    }
     
     
     
     
 
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
package com.imooc.food;
 
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
public class FoodDaoImpl {
    //存放菜品信息的List
    private static final List<Map<String,Food>> db = new ArrayList<Map<String,Food>>();
     
    //添加菜品
    public static void addFood(Map<String,Food> map) {      
        db.add(map);
    }
    //查询所有菜品信息
    public static List<Map<String,Food>> getAllFood(){
        return db;
    }
    //根据菜品名称查询菜品信息
    public static List<Map<String,Food>> getFoodByName(String name){
        List<Map<String,Food>> list = new ArrayList<Map<String,Food>>();
        boolean flag=false;
        Map<String,Food> map=null;
        for(Map<String,Food> l : db) {
            for(String key:l.keySet()) {
                if(l.get(key).getFoodName().equals(name)) {
                    map=l;
                    flag=true;
                    break;
                }
            }
        }
        if(flag)
            list.add(map);
        return list;
    }
    //根据菜品id查询菜品信息
    public static List<Map<String,Food>> getFoodById(String id){
        List<Map<String,Food>> list = new ArrayList<Map<String,Food>>();
        Map<String,Food> map=null;
        boolean flag = false;
        for(Map<String,Food> l : db) {
            for(String key:l.keySet()) {
                if(l.get(key).getId().equals(id)) {
                    map=l;
                    flag=true;
                    break;
                }
            }
        }
        if(flag)
            list.add(map);
        return list;
    }
     
    //菜品修改
    public static void updateFood(Map<String,Food> map) {
        //boolean flag=true;
        Map<String,Food> map1 = null;
        for(Map<String,Food> m : db) {
            for(String key:m.keySet()){
                for(String k:map.keySet()) {
                    if(map.get(k).getId().equals(m.get(key).getId())) {
                        map1 = m;
                        break;
                    }
                }
                }
            db.remove(map1);
            db.add(map);
            }
    }
    //根据菜品id进行删除
    public static void deleteFoodById(String id) {
        Map<String,Food> map = null;
        for(Map<String,Food> l : db) {
            for(String key:l.keySet()) {
                if(l.get(key).getId().equals(id)) {
                    map = l;
                    break;
                }
            }
        }
        db.remove(map);
    }
}


chrismorgen 2018-10-07 13:26:59

建议你把FoodUpdateServlet中的response.sendRedirect(request.getContextPath()+"/showFoodList.jsp");这段代码放到if else语句外试一试,如果我的建议解决了你的问题,请采纳,祝学习愉快~

  • 提问者 慕桂英8566455 #1
    并不行,后台也没有打印出“修改成功”
    2018-10-09 08:48:48
  • chrismorgen 回复 提问者 慕桂英8566455 #2
    建议你把FoodDaoImpl类中的代码都粘贴上来,祝学习愉快~
    2018-10-09 09:49:59
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
从网页搭建入门Java Web2018版
  • 参与学习           人
  • 提交作业       1088    份
  • 解答问题       10204    个

如果你有Java语言基础,又想以后从事Java Web开发,那么本路径是你的不二选择!本路径从网页搭建开始入手,通过大量案例来学习Java Web基础。定能助你完成Java Web小白的蜕变!

了解课程
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师
插入代码