我要做的是列出具有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 >");
这是将显示数据的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);
}
答案 0 :(得分:0)
您编写的代码不起作用,因为在呈现HTML页面时,您将项目信息存储在请求对象上。
一种解决方案是为每个字段定义一个隐藏的HTML字段,就像您已经为id
属性定义的一样。
答案 1 :(得分:0)
我试图将包含所有数据的Arraylist设置为一个属性,但是没有用。
由于浏览器向服务器发出新请求,因此从jsp提交表单最终将丢弃旧的request
对象本身。
无需依赖request.setAttribute("list", list)
即可在servlet本身中仅使用一次session.setAttribute("list", list)
,而无需在jsp中进行设置。
现在,要访问列表,请使用session.getAttribute("list")