Java EE点击按钮新增对象至列表仅显示单个结果的问题排查
问题分析与解决方案
哦,这个问题我太熟啦!你每次点击Add按钮只能显示一个结果的核心原因是:每次请求Servlet时,你都创建了一个全新的ArrayList,完全覆盖了之前Session里保存的列表。
具体问题点:
在你的Servlet代码里,这行代码是关键问题:
ArrayList<Book> list = new ArrayList<>();
每次点击按钮触发请求,都会新建一个空列表,然后只加入当前的书籍,再把这个新列表存到Session里——这样之前添加的内容就全丢了,自然只能看到最新的那一条。
修复步骤:
- 先从Session获取已有列表:如果Session里还没有
book列表(也就是第一次点击的时候),再创建新的ArrayList;如果已经存在,就直接用这个列表。 - 修正HTML按钮的拼写错误:你的按钮
type写成了subtmit,正确应该是submit,不然可能导致表单提交异常。
修改后的代码:
1. 修正后的Servlet代码:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session = request.getSession(true); String title = request.getParameter("title"); double price = Double.parseDouble(request.getParameter("price")); // 先从Session获取已有的列表,不存在则新建 ArrayList<Book> list = (ArrayList<Book>) session.getAttribute("book"); if (list == null) { list = new ArrayList<>(); } // 添加新书籍到列表 list.add(new Book(title, price)); // 把更新后的列表存回Session session.setAttribute("book", list); RequestDispatcher rd = request.getRequestDispatcher("home.jsp"); rd.forward(request, response); }
2. 修正后的JSP表单按钮:
<button type="submit">Add</button>
验证效果:
现在每次点击Add按钮,Servlet会先取出Session里已有的书籍列表(如果是第一次则新建),把新的书籍添加进去,再存回Session。JSP页面的c:forEach标签就能遍历所有添加过的书籍,显示完整的列表啦!
内容的提问来源于stack exchange,提问作者user13652245
相关产品推荐
相关产品推荐

