我正在尝试制作一个 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>
这是一项作业,但该作业已上交并评分。我现在只是想提高我的理解力。有时我希望发生一些行不通的事情。如果有人告诉我我需要某种数据库来保存信息,我不会感到惊讶。 如果有人能指出我的错误在哪里,或者告诉我为什么它不会保留,我将非常感激。
最佳答案
在您的方法 getCardFromRequest
中,您从 getSession().getAttribute("Card")
获取卡片对象,但是当您更新它并将其放回到您放置的 session 时它像这样返回 getSession().setAttribute("card", card)
您应该像这样调用 setAttribute setAttribute("Card", card)
这样您就可以放置和检索相同的内容 session 中的对象
关于java - JSP用JSP打印数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32533956/