其余功能都能实现,只有菜品删除功能不能实现,请检查代码

其余功能都能实现,只有菜品删除功能不能实现,请检查代码

贴上菜品处理类代码

package com.imooc.servlet;
import com.imooc.domain.FoodInfo;
import java.util.*;
//菜品信息处理类
public class FoodDaoImpl {
	private static final List<FoodInfo> db=new ArrayList<>();
    //添加新菜品	
    public static void addFood(FoodInfo food) {
       db.add(food);
    }
    //获得所有菜品信息
	public static List<FoodInfo> getAllFood(){
		return db;
	}
	//根据菜品名称查询菜品信息
    public static List<FoodInfo> getFoodByName(String foodName){
    	   List<FoodInfo> result=new ArrayList<>();
    	   for(FoodInfo food:db) {
    		   if(((String)food.getFoodName()).equals(foodName)) result.add(food);
    	   }
    	   return result;
    }
	//根据菜品id查询菜品信息
    public static List<FoodInfo> getFoodById(String id){
    	   List<FoodInfo> result=new ArrayList<>();
  	   for(FoodInfo food:db) {
  		   if(food.getId().equals(id)) result.add(food);
  	   }
  	   return result;
    }
	//菜品修改
    public static void updateFood(FoodInfo food) {
	   for(FoodInfo fooditem:db) {
		   if(fooditem.getId().equals(food.getId())) {
			   fooditem.setDescription(food.getDescription());
			   fooditem.setFoodimage(food.getFoodimage());
			   fooditem.setFoodName(food.getFoodName());
			   fooditem.setPrice(food.getPrice());
			   fooditem.setTaste(food.getTaste());
		   }
	   }
 }
	//根据菜品ID进行删除
    public static void deleteFoodById(String id) {
    	   for(FoodInfo fooditem:db) {
    		if(fooditem.getId().toString().equals(id)) db.remove(fooditem);
    	   }
    }
	public static void main(String[] args) {
		// TODO Auto-generated method stub

	}

}

贴上deletefood servlet代码

package com.imooc.servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


/**
 * 菜品删除servlet
 */
public class FoodDeleteServlet extends HttpServlet {
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String id=request.getParameter("id");
	    FoodDaoImpl fooddaoimpl= new FoodDaoImpl();
		fooddaoimpl.deleteFoodById(id);
		response.sendRedirect(request.getContextPath()+"/selectFoodList.jsp");

	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

贴上错误信息

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

正在回答

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

3回答

如果在循环中删除集合中的数据就会出现java.util.ConcurrentModificationException异常。解决办法是在if语句中remove后写上break语句,避免再进行进行循环遍历。

一般情况下,我们会先查询菜品是否存在,然后在循环外根据查询结果,如果存在就删除,否则给出错误提示。祝学习愉快!

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

  • MixedEnger 提问者 #1
    老师看我的最新回复,有新的问题,如果老师觉得我描述的仍旧不是很清楚,我再贴上我的截图
    2018-06-04 04:20:30
  • MixedEnger 提问者 #2
    老师,删除菜品的问题解决了 需要通过index遍历list
    2018-06-04 06:16:17
提问者 MixedEnger 2018-06-04 04:19:25

谢谢老师,添加了break可以跑得通了,而且我也增加了if判断;

但是我又遇到了一个新的问题, 似乎当我按顺序添加菜品时,我只能按顺序删除,比如我添加了1号和2号菜品,我只能先删除1号,再删除2号,这让我很费解

贴上新的代码

菜品处理类

package com.imooc.servlet;
import com.imooc.domain.FoodInfo;
import java.util.*;
//菜品信息处理类
public class FoodDaoImpl {
	private static final List<FoodInfo> db=new ArrayList<>();
    //添加新菜品	
    public static void addFood(FoodInfo food) {
       db.add(food);
    }
    //获得所有菜品信息
	public static List<FoodInfo> getAllFood(){
		return db;
	}
	//根据菜品名称查询菜品信息
    public static List<FoodInfo> getFoodByName(String foodName){
    	   List<FoodInfo> result=new ArrayList<>();
    	   for(FoodInfo food:db) {
    		   if(((String)food.getFoodName()).equals(foodName)) result.add(food);
    	   }
    	   return result;
    }
	//根据菜品id查询菜品信息
    public static List<FoodInfo> getFoodById(String id){
    	   List<FoodInfo> result=new ArrayList<>();
  	   for(FoodInfo food:db) {
  		   if(((String)food.getId()).equals(id)) result.add(food);
  	   }
  	   return result;
    }
	//菜品修改
    public static void updateFood(FoodInfo food) {
	   for(FoodInfo fooditem:db) {
		   if(fooditem.getId().equals(food.getId())) {
			   fooditem.setDescription(food.getDescription());
			   fooditem.setFoodimage(food.getFoodimage());
			   fooditem.setFoodName(food.getFoodName());
			   fooditem.setPrice(food.getPrice());
			   fooditem.setTaste(food.getTaste());
		   }
		   break;
	   }
 }
	//根据菜品ID进行删除
    public static void deleteFoodById(String id) {
    	   for(FoodInfo fooditem:db) {
    		if(((String)fooditem.getId()).equals(id)) db.remove(fooditem);break;
    	   }
    }
	public static void main(String[] args) {
		// TODO Auto-generated method stub

	}

}

servlet的代码

package com.imooc.servlet;

import java.io.IOException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.imooc.domain.FoodInfo;


/**
 * 菜品删除servlet
 */
public class FoodDeleteServlet extends HttpServlet {
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");//先进行编码转换后再取数据
		String id=(String)request.getParameter("id").trim();
		List<FoodInfo> list= FoodDaoImpl.getFoodById(id);
		if(list.size()!=0&&list!=null) {
			FoodDaoImpl.deleteFoodById(id);
			response.sendRedirect(request.getContextPath()+"/showFoodList.jsp");
		}
		else {
			request.setAttribute("msg", "不存在该菜品!");
			request.getRequestDispatcher("/deleteById.jsp").forward(request,response);
		}
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}


import java.io.IOException;

import java.util.List;


import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;


import com.imooc.domain.FoodInfo;



/**

 * 菜品删除servlet

 */

public class FoodDeleteServlet extends HttpServlet {

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

request.setCharacterEncoding("UTF-8");//先进行编码转换后再取数据

String id=(String)request.getParameter("id").trim();

List<FoodInfo> list= FoodDaoImpl.getFoodById(id);

if(list.size()!=0&&list!=null) {

FoodDaoImpl.deleteFoodById(id);

response.sendRedirect(request.getContextPath()+"/showFoodList.jsp");

}

else {

request.setAttribute("msg", "不存在该菜品!");

request.getRequestDispatcher("/deleteById.jsp").forward(request,response);

}

}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

// TODO Auto-generated method stub

doGet(request, response);

}


}

再是jsp的代码

<%@ 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>
<base href="<%=basePath%>">
<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" align="center"><%= msg %></font></h3>
		<form action="<%=basePath%>/FoodDeleteServlet" method="post">
			<table width="400px" border="1px" cellspacing="0px" cellpadding="0px">
				<tr>
					<td>菜品ID</td>
					<td><input type="text" name="id"></td>
				</tr>
				<tr>
					<td colspan="2" style="text-align:center"><input type="submit" value="删除"></td>
				</tr>
			</table>
		</form>
	</center>
</body>
</html>


  • 提问者 MixedEnger #1
    修改一下代码就可以解决以上的问题, 如果有遇到相似问题的同学可以参考 //根据菜品ID进行删除 public static void deleteFoodById(String id) { for(int i=db.size()-1;i>=0;i--) { FoodInfo food=db.get(i); if(food.getId().equals(id)) { db.remove(food);break; } } }
    2018-06-04 06:17:21
提问者 MixedEnger 2018-06-03 03:37:22

补充一下跳转后的jsp的代码我觉得排除了返回的list为空的情况

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@page import="com.imooc.domain.FoodInfo" %>
<%@page import="java.util.*" %>
<%@page import="com.imooc.servlet.FoodDaoImpl" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path;
%>
<!DOCTYPE html>
<html>
<head>
<base href="<%=basePath%>">
<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>
			<tbody>
			<%if(FoodDaoImpl.getAllFood()!=null&&FoodDaoImpl.getAllFood().size()!=0){
					List<FoodInfo> list=FoodDaoImpl.getAllFood();
				    for(FoodInfo food:list){
					   //获得绝对路径最后一个/的位置
					   int lastindex=food.getFoodimage().lastIndexOf("/");
					   //获得文件上传时的唯一文件名
		    	            String fileName=food.getFoodimage().substring(lastindex+1);
					    //System.out.println(fileName);
					%>
				<tr>
					<td><%=food.getId() %></td>
					<td><%=food.getFoodName() %></td>
					<td><%=food.getTaste() %></td>
					<td><img src="<%=basePath %>/upload/<%=fileName %>" /></td>
					<td><%=food.getPrice() %></td>
					<td><%=food.getDescription() %></td>
				</tr>
					<%
				  }
			 }else{
				%>
				<tr>
				    <td><a href="<%=basePath %>/addFood.jsp">请先添加菜品!</a></td>
				</tr>
				<% 
			}
		    %>	
			</tbody>
		</table>
	</center>
</body>
</html>


问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

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

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

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