查询问题!

查询问题!

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.food.Food;
import com.imooc.food.FoodDaolmpl;
/**
 * 菜品名称查询的Servlet
 */
@WebServlet("/SelectServlet")
public class SelectServlet extends HttpServlet {
 private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public SelectServlet() {
        super();
        // TODO Auto-generated constructor stub
    }
 /**
  * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
  */
 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  // 获取菜品的名字
  String foodName = request.getParameter("foodName");
  // 获取存储菜品的集合
  FoodDaolmpl fdl = new FoodDaolmpl();
  List<Food> foodList = fdl.getAllFood();
  for(Food f : foodList) {
   System.out.println(f);
  }
  System.out.println(fdl.getAllFood());
  // 使用菜品名称进行查询
  if(fdl.getFoodByName(foodName) != null) {
   // 如果菜品存在,跳入到展示菜品页面
   response.sendRedirect(request.getContextPath()+"/showFoodList.jsp");
  }else {
   // 如果菜品不存在,则跳入到添加菜品页面
   request.setAttribute("msg", "菜品不存在,请先添加菜品");
   request.getRequestDispatcher("/addFood.jsp").forward(request, response);
  }
  
 }
 /**
  * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
  */
 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  // TODO Auto-generated method stub
  doGet(request, response);
 }
}
package com.imooc.food;
import java.util.ArrayList;
import java.util.List;
public class FoodDaolmpl {
 // 存放菜品信息的List
 private static final List<Food> db = new ArrayList<Food>();
 // 添加菜品
 public void addFood(Food food) {
  db.add(food);
 }
 // 查询所有菜品信息
 public List<Food> getAllFood() {
  if (db.isEmpty()) {
   return null;
  } else {
   return db;
  }
 }
 // 根据菜品名称查询菜品信息
 public Food getFoodByName(String foodName) {
  if(!db.isEmpty()) {
   for(Food f : db) {
    if(f.getFoodName().equals(foodName)){
     return f;
    }
   }
   return null;
  }else {
   return null;
  }
 }
 // 根据菜品id查询菜品信息
 public Food getFoodById(String id) {
  // 遍历集合判断菜品名称是否相同
  for (Food f : db) {
   // 菜品名称相同返回该食物对象
   if (f.getFoodId().equals(id)) {
    return f;
   }
  }
  // 没有找到则返回null值
  return null;
 }
 // 菜品修改
 public void updateFood(Food newFood) {
  for (Food f : db) {
   // 如果旧id与新id相等,则进行替换
   if (f.getFoodId().equals(newFood.getFoodId())) {
    // 删除原食物
    db.remove(f);
    // 添加新食物
    db.add(newFood);
    return;
   }
  }
 }
 // 根据菜品ID进行删除
 public void deleteFoodById(String id) {
  for (Food f : db) {
   if (f.getFoodId().equals(id)) {
    db.remove(f);
    return;
   }
  }
 }
}
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
    String basePath=request.getScheme()+"://"+request.getServerName()
                +":"+request.getServerPort()+request.getContextPath()+"/";
%>
<!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>
  <form action="<%=basePath%>/SelectServlet" method="post">
   <input type="hidden" name="type" value="2">
   <table width="400px" border="1px" cellspacing="0px" cellpadding="0px">
    <tr>
     <td>菜名</td>
     <td><input type="text" name="foodName"></td>
    </tr>
    <tr>
     <td colspan="2" style="text-align:center"><input type="submit" value="查询"></td>
    </tr>
   </table>
  </form>
 </center>
</body>
</html>

老师,有个问题就是,还是没办法根据菜名查询出来,我控制台输出了一下,就添加的菜品也都存到db中了,但是就是查询不到,我不知道哪里有问题。老师帮忙看看

正在回答

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

2回答

同学可以输出一下request.getParameter("foodName")获取到的foodName是什么?

然后改造一下查询方法,运行一下

// 根据菜品名称查询菜品信息
 public Food getFoodByName(String foodName) {
  if(!db.isEmpty()) {
   for(Food f : db) {
    System.out.println(f.getFoodName()+"==="+foodName);
    if(f.getFoodName().equals(foodName)){
     return f;
    }
   }
   System.out.println("db中没找到");
   return null;
  }else {
   System.out.println("db中内容为空");
   return null;
  }
 }

祝学习愉快~

  • Levinson 提问者 #1
    老师。request.getParameter("foodName")获得的是一段乱码。不过内容是一样的。
    2019-11-14 18:52:43
  • 芝芝兰兰 回复 提问者 Levinson #2
    那么需要先解决一下乱码问题呢,可以参考前面的Servlet月JSP进阶课程http://class.imooc.com/course/693中第4章内容。祝学习愉快~
    2019-11-14 19:22:39
芝芝兰兰 2019-11-14 18:01:34

同学你好。同学是在showFoodList页面中看不到内容吗?同学在这个页面中是如何展示的呢?

此处只是在if中进行了查询,这个查询返回的Food在判断后,并没有放入request或者其他可以传递给页面的位置。那么页面就无法展示出结果呢。

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

如果解答了同学的疑问,望采纳~

祝学习愉快~

  • 提问者 Levinson #1
    不是,是查询过后它显示菜品不存在,跳到了添加菜品的页面上去。
    2019-11-14 18:28:30
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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