我正在练习Java ee,我在JSP中制作了两个输入字段和按钮。 当点击按钮“add”时,我想在列表中添加这两个字段,并在我的jsp页面上显示它们。 现在它只显示我一个结果,每次我点击按钮。 我做错了什么? 这是我的JSP:
<body>
<form action="addtocart" method="GET">
Title: <input type="text" name="title"> <br>
Price: <input type="text" name="price"> <br>
<button type="subtmit">Add</button>
</form>
<c:forEach var="bookList" items="${book}">
<ul>
<li>${bookList.name}</li>
<li>${bookList.price}</li>
</ul>
</c:forEach>
</body>
这是我的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"));
ArrayList<Book> list = new ArrayList<>();
list.add(new Book(title,price));
session.setAttribute("book", list);
RequestDispatcher rd = request.getRequestDispatcher("home.jsp");
rd.forward(request, response);
}
您可以使私有静态最终数组列表
,因此前一个结果将存储到程序结束。
或者考虑并发性,可以使用CopyOnWriteArrayList
。
查看以下内容:https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/copyonwritearraylist.html
您正在初始化每个请求的新列表并返回它,所以您只得到当前添加的项目。 只在doGet()
方法之外初始化list一次。
ArrayList<Book> list = new ArrayList<>();
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"));
list.add(new Book(title,price));
session.setAttribute("book", list);
RequestDispatcher rd = request.getRequestDispatcher("home.jsp");
rd.forward(request, response);
}
另外,按照惯例为变量和方法命名:)