Отправить объект со страницы JSP - PullRequest
0 голосов
/ 16 октября 2018

Что я хочу сделать, это составить список людей с id и другими атрибутами.

Прежде всего приложение открывается с формой для ввода личных данных.Затем он переходит к сервлету, ответственному за сбор данных.Затем сервлет отправляет его в другой файл JSP, который показывает данные.Затем, если пользователь решает добавить еще один, он добавляет его.

Это работало нормально, но мне пришлось изменить приложение, чтобы добавить в таблицу HTML кнопку отправки, чтобы пользователь мог удалить нужного ему человека с помощью другого сервлета.для удаления.

Я попытался установить 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>");

    }
%>

это первый сервлет, который будет захватывать данные, поступающие из первой отправленной формы

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);

}

, и это ответчик сервлета, отвечающий за удаление объекта и отправляющий нас на первый сервлет, чтобы он мог отправить намснова в файл 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);
}

Кстати, это не помогло мне: как отправить ArrayList из jsp в сервлет

Ответы [ 2 ]

0 голосов
/ 17 октября 2018

Я попытался установить Arraylist, который содержит все данные в качестве атрибута, но он не работал.

Форма отправки из jsp в конечном итоге отбрасывает сам старый объект request, так какбраузер делает новый запрос к серверу.

Вместо того, чтобы полагаться на request.setAttribute("list", list), используйте session.setAttribute("list", list) только один раз в самом сервлете, нет необходимости устанавливать в jsp.

Теперь, чтобы получить доступ к списку, используйте session.getAttribute("list")

0 голосов
/ 17 октября 2018

Код, который вы пишете, может не работать, потому что вы сохраняете информацию об объекте запроса при отображении страницы HTML.

Одним из решений является определение для каждого поля скрытого поля HTML, как вы ужеопределить атрибут id.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...