让删除按钮工作 Java Servlet

Getting remove button to work Java Servlet

我有一个名为 LeggTilHandlekurv (shoppingCart) 的 servlet、一个 jsp 和一个 Vare (Item) class。意思是将商品添加到 shoppingCart 并且效果很好,但问题是我怎样才能让删除功能起作用?在 leggtilhandlekurv.jsp 中,您可以选择输入一个项目,该项目将与一个删除按钮一起显示。我希望删除按钮起作用。到目前为止,我的尝试是在 servlet class 中标出的,从 if(vare.equals("remove")).

开始
@WebServlet("/"+LEGGTILHANDLEKURV_URL)
public class LeggTilHandlekurv extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
   
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            request.getRequestDispatcher("leggtilhandlekurv.jsp").forward(request, response);
    }
    
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
    HttpSession session= request.getSession();
    String varen=request.getParameter("vare");
    
    Vare vare=new Vare();
    vare.setVareNavn(varen);
    

     
    ArrayList<Vare> varer = new ArrayList<Vare>();
    varer.add(vare);
    if(request.getServletContext().getAttribute("handlekurv")!=null) {
        varer=(ArrayList<Vare>) request.getServletContext().getAttribute("handlekurv");
        varer.add(vare);
        request.getServletContext().setAttribute("handlekurv", varer);
    }
    else {
        request.getServletContext().setAttribute("handlekurv", varer);
        
    }
    response.sendRedirect("leggtilhandlekurv.jsp");

/*  
    if(vare.equals("remove")) {
        varer=(ArrayList<Vare>) session.getAttribute("handlekurv");
        varer.remove(vare);
        session.setAttribute("handlekurv", varer);
        request.getRequestDispatcher("leggtilhandlekurv.jsp").forward(request, response);
        
    }
    */
    }

}
public class Vare {
    
    private String vareNavn;

    public String getVareNavn() {
        return vareNavn;
    }

    public void setVareNavn(String vareNavn) {
        this.vareNavn=vareNavn;
    }
}

<%@page import="oppgave1.Vare"%>
<%@page import="java.util.ArrayList"%>
    
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%> 
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Handleliste</title>
</head>
<body>

<%
if(session.getAttribute("pass")==null){
    response.sendRedirect("login.jsp");
}
%>

<h1>Min handleliste</h1>


<form action="LeggTilHandlekurv" method="post">
        Legg til vare:  <br>
     <input type="text" name="vare"> <br>
     <input type="submit" value="Add item">
</form>
<table>
<th>Varer</th>

<%
ArrayList<Vare> varer = new ArrayList<Vare>();
if(request.getServletContext().getAttribute("handlekurv")!=null){
    varer=(ArrayList<Vare>) request.getServletContext().getAttribute("handlekurv");
if(!varer.isEmpty()){
    for(Vare vare: varer){
        
    
    %>
    <tr>
    <td> <%=vare.getVareNavn() %></td>
    <td> <input type="submit" name="remove" value="Remove item"> </td>
    </tr>
<%
    }

    }

}

%>
</table>
</body>
</html>

您可以使用值为 vareNavn 的隐藏输入字段和将表单提交给 servlet 并获得响应的表单标签。因此,您的 jsp 代码将如下所示:

<td>
    <form action="LeggTilHandlekurv" method="post">
       <!-- hidden input-->
       <input type="text" hidden name="item" value="<%=vare.getVareNavn() %>">
       <!--added name attribute-->
       <input type="submit" name="remove" value="Remove item"> 
    </form>
  </td>

然后,在您的 servlet doPost 方法中,您需要获取隐藏的输入值,即 item,然后将该值与存储在 session 中的值进行比较,如果匹配我们只需要从会话中删除该值。因此,您的 doPost 方法代码将如下所示:

//check if request is for remove
if (request.getParameter("remove") != null) {
  //get values
  String item = request.getParameter("item");
  //get data from session
  ArrayList<Vare> varer1 = (ArrayList<Vare>) request.getServletContext().getAttribute("handlekurv");

  Iterator<Vare> it = varer1.iterator();
  //iterate through datas
  while (it.hasNext()) {
    Vare name = it.next();
    //check if values matches
    if (name.getVareNavn().equals(item)) {
      it.remove(); //remove
    }
  }
  //pass updated value to jsp page
  session.setAttribute("handlekurv", varer1);
  request.getRequestDispatcher("leggtilhandlekurv.jsp").forward(request, response); 
  }

此外,在此处 name 属性 <input type="submit" name="add" value="Add item"> 并将用于添加新值的所有代码放入 if(request.getParameter("add") != null){ //put code here }