有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

带JSP的java JSP打印数组

我正在尝试制作一个rolodex风格的JSP。我在JSP中使用java类,不允许使用servlet或其他任何东西。我无法保留添加的条目。当我进入我的添加条目页面并添加一个人时,计数会上升一个。然后,如果我转到“主页”,它将从我为调试设置的任何页面开始。此外,如果我尝试添加第二个人,计数将不会再次增加

下面是发生的事情的流程:

从4个人开始-->;添加第一个人-->;计数为5人-->; 点击主页链接-->;人数是4人

从4个人开始-->;添加第一个人-->;计数为5人-->; 添加2d人物-->;人数是5人

以下是我的java类:

package Cards;


 import java.util.ArrayList;
 import javax.servlet.http.HttpServletRequest;


  public class Card {

  private final ArrayList<Line> entries = new ArrayList<>();
  private int entrySequenceId = 0; // to give each entry a unique id

  public Card() {
  }

  public ArrayList<Line> getEntries() {
  return entries;
 }

  public void modifyEntry(int entryIndex, String phoneNumber) {
  if (entryIndex >= 0 && entryIndex < entries.size()) {
  entries.get(entryIndex).phoneNumber = phoneNumber;
 }
 }

 public void addEntry(String name, String phoneNumber) {
  entries.add(new Line(name, phoneNumber));
 }

  public ArrayList<Line> search(String searchText) {
   searchText = searchText.toLowerCase();
   ArrayList<Line> matches = new ArrayList<>();
  for (Line entry : entries) {
   if (entry.name.toLowerCase().contains(searchText)) {
    matches.add(entry);
    }
  }
  return matches;
 }

  public Line getEntry(String id) {
  int entryId = Integer.valueOf(id);
  for (Line line : entries) {
  if (line.getEntryId() == entryId) {
    return line;
  }
  }
  return null;
  }

  public static Card getCardFromRequest(HttpServletRequest request) {
  Card card = (Card) request.getSession().getAttribute("Card");
  if (card == null) {
   card = new Card();
  // for debug, hard coding of some entries - 2 of the same first name 2   sets of the 
    //same last name 2 of the same number and 2 with speacail characters
   card.entries.add(card.new Line("Luis Ramos", "4772662"));
   card.entries.add(card.new Line("Allison Ramos", "4772662"));
   card.entries.add(card.new Line("Meg Ryan", "1-800-999-9999"));
  card.entries.add(card.new Line("Luis Ryan", "1-8"));
  request.getSession().setAttribute("card", card);
  }
  return card;
 }

  public class Line {

   private String name;
   private String phoneNumber;
   private final int entryId;

   public Line(String name, String phoneNumber) {
  this.name = name;
  this.phoneNumber = phoneNumber;
   this.entryId = Card.this.entrySequenceId++;
  }

    public int getEntryId() {
   return entryId;
   }

   public String getName() {
   return name;
   }

   public void setName(String name) {
   this.name = name;
   }

   public String getPhoneNumber() {
  return phoneNumber;
  }

   public void setPhoneNumber(String phoneNumber) {
  this.phoneNumber = phoneNumber;
    }

 }
}

下面是我的添加JSP:

     <%@page import="java.util.ArrayList"%>
     <%@page import="Cards.Card"%>

     <%@page contentType="text/html" pageEncoding="UTF-8"%>

     <!DOCTYPE html>

     <html>

     <head>

     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

     <title>Rolodex</title>

     </head>

     <body bgcolor="lightgray">

     <%

      Card card = Card.getCardFromRequest(request);
       String name = request.getParameter("name");
      if (name != null && name.length() != 0) {
        card.addEntry(name, request.getParameter("phoneNumber"));
      }
      %>
     <center>

       <%
         out.println("There are " + card.getEntries().size() + " entries.<br/>");
     %>

        <form action="Add.jsp">Name:<input type="text" name="name"/>    <br/>Phone number:<input type="text" name="phoneNumber"/><input     type="submit" value="Add"/></form>

    <br/>

    <a href="Index.jsp">Home</a>

     </center>

 </body>

</html>

这是一项作业,但作业已交上并评分。我现在只想提高我的理解力。有时候我想让一些事情发生,但这些事情是行不通的。如果有人告诉我需要某种数据库来保存信息,我不会感到惊讶。 如果有人能指出我的错误在哪里,或者告诉我为什么它不会一直存在,我将非常感激


共 (1) 个答案

  1. # 1 楼答案

    在你的方法getCardFromRequest中,你从getSession().getAttribute("Card")获得你的卡片对象,但当你更新它并将其放回会话时,你将其放回如下getSession().setAttribute("card", card)你应该像这样调用setAttribute setAttribute("Card", card),所以你从会话中放回相同的对象