提问者:小点点

如何创建新的对象在每个按钮点击在Java EE?


我正在练习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);
}

共2个答案

匿名用户

您可以使私有静态最终数组列表; list=new arraylist<;>();,因此前一个结果将存储到程序结束。

或者考虑并发性,可以使用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);
}

另外,按照惯例为变量和方法命名:)