JSP打印数组与JSP

时间:2015-09-12 00:32:29

标签: java arrays jsp

我正在尝试制作rolodex样式的JSP。我在JSP中使用java类,不允许使用servlet或其他任何东西。我无法保留更多条目。当我转到我的添加条目页面并添加一个人时,计数会增加一个。如果我去" home"页面它会从我为调试设置的任何内容开始。此外,如果我尝试添加第二个人,则计数不会再次上升。

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

从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;
    }

 }
}

这是我的Add 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 个答案:

答案 0 :(得分:1)

在您的方法getCardFromRequest中,您可以从getSession().getAttribute("Card")获取卡片对象,但是当您更新它并将其重新发送到会话时,您可以像getSession().setAttribute("card", card)一样将其放回去,您应该像这样调用setAttribute setAttribute("Card", card)所以您从会话中放置并检索相同的对象