我正在尝试制作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>
这是一项作业,但作业已经上交并评分。我现在只想提高我的理解力。有时候我想要发生不会起作用的事情。如果有人告诉我我需要某种数据库来保存信息,我不会感到惊讶。 如果有人能指出我错误的地方,或者告诉我为什么它不会停留,我将非常感激。
答案 0 :(得分:1)
在您的方法getCardFromRequest
中,您可以从getSession().getAttribute("Card")
获取卡片对象,但是当您更新它并将其重新发送到会话时,您可以像getSession().setAttribute("card", card)
一样将其放回去,您应该像这样调用setAttribute setAttribute("Card", card)
所以您从会话中放置并检索相同的对象