【问题标题】:JSP print Array with JSPJSP 使用 JSP 打印数组
【发布时间】:2015-09-12 00:32:28
【问题描述】:

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

这是发生的事情的流程:

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

从 4 人开始 --> 添加第 1 人 --> 计数为 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>

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

【问题讨论】:

  • 您如何运行/部署您的应用程序?

标签: java arrays jsp


【解决方案1】:

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

【讨论】:

  • 如此简单,但我错过了。我不会告诉你我花了多长时间试图弄清楚这个问题。我也看到我在方法上是如何搞砸的,这一直是我的目标。非常感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2018-12-15
  • 1970-01-01
  • 1970-01-01
  • 2019-07-17
  • 2012-04-23
  • 1970-01-01
  • 1970-01-01
  • 2011-04-15
相关资源
最近更新 更多