从JSP页面发送对象

时间:2018-10-16 20:17:10

标签: java jsp servlets arraylist

我要做的是列出具有id和其他属性的人员。

首先,该应用程序打开并带有输入个人数据的表格。然后转到负责捕获数据的servlet。然后,该servlet将其发送到另一个显示数据的JSP文件。然后,如果用户选择添加另一个,则会添加它。

这很好,但是我不得不更改应用程序以将提交按钮添加到HTML表中,以便用户可以使用另一个servlet删除想要删除的人。

我试图将包含所有数据的ArrayList设置为属性,但是没有用。

首先,我尝试过这种方式:

String x = request.getParameter("submit");
    if (x != null) {
            request.setAttribute("list", list);
        request.setAttribute("id", p.getId());
        request.getRequestDispatcher("Supprimer").forward(request, response);}

然后我这样尝试:

out.println("  <tr><td> <form  method='POST'>");
        out.println("<input type='hidden' name='id' value='" + p.getId() + "' >");
        request.setAttribute("list", list);
        out.println("<input type='submit' value='Supprimer' name='submit' ></td></tr> ");

        out.println("  <tr><td> </form >");

Screenshot of the HTML output

这是将显示数据的jsp文件

<%
    ArrayList<personne> list = (ArrayList<personne>) request.getAttribute("list");
    request.setAttribute("listt", list);

    for (personne p : list) {
        out.println("<table border='2'>");
        out.println("<tr>  <td>ID</td><td>");

        out.println(p.getId());
        out.println("</td> </tr><tr><td>Nom</td> <td>");

        out.println(p.getNom());
        out.println(" </td> </tr><tr> <td>Prenom</td> <td>");
        out.println(p.getPrenom());
        out.println(" </td>  </tr><tr> <td>Sexe</td> <td>");
        out.println(p.getSexe());
        out.println(" </td></tr><tr><td>CodePostale</td><td>");
        out.println(p.getCodePostal());
        out.println("  </td></tr> </table> </br>");

        out.println("  <tr><td> <form  method='POST'>");
        out.println("<input type='hidden' name='id' value='" + p.getId() + "' >");
        request.setAttribute("list", list);
        out.println("<input type='submit' value='Supprimer' name='submit' ></td></tr> ");

        out.println("  <tr><td> </form >");

        String x = request.getParameter("submit");
        if (x != null) {
            request.setAttribute("list", list);
            request.setAttribute("id", p.getId());
            request.getRequestDispatcher("Supprimer").forward(request, response);

        }
        out.println("  </table> </br>");

    }
%>

这是第一个servlet,它将捕获来自第一个提交表单的数据

protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    int id = Integer.parseInt(request.getParameter("id"));
    String nom = request.getParameter("nom");
    String prenom = request.getParameter("prenom");
    String sexe = request.getParameter("sexe");
    int codePostal = Integer.parseInt(request.getParameter("cd"));
    personne p = new personne(id, nom, prenom, sexe, codePostal);
    ap.add(p);
    request.setAttribute("list", ap);

    request.getRequestDispatcher("affichage.jsp").forward(request, response);

}

这是servlet负责删除对象并将其重新发送到第一个servlet,以便它可以再次将我们发送到jsp文件以向我们显示新数据

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    ArrayList<personne> list = (ArrayList<personne>)request.getAttribute("list");
    int id =Integer.parseInt(""+request.getAttribute("id"));
    System.out.println(id);

     java.util.Iterator<personne> itr =  list.iterator(); 
     while (itr.hasNext()) 
        { 
         if(id==itr.next().getId()){
             itr.remove(); 

        }

        } 

    request.setAttribute("list", list);
    request.getRequestDispatcher("affichage.jsp").forward(request, response);
}

这对我没有帮助:how to send ArrayList from jsp to servlet

2 个答案:

答案 0 :(得分:0)

您编写的代码不起作用,因为在呈现HTML页面时,您将项目信息存储在请求对象上。

一种解决方案是为每个字段定义一个隐藏的HTML字段,就像您已经为id属性定义的一样。

答案 1 :(得分:0)

  

我试图将包含所有数据的Arraylist设置为一个属性,但是没有用。

由于浏览器向服务器发出新请求,因此从jsp提交表单最终将丢弃旧的request对象本身。

无需依赖request.setAttribute("list", list)即可在servlet本身中仅使用一次session.setAttribute("list", list),而无需在jsp中进行设置。

现在,要访问列表,请使用session.getAttribute("list")