2015-09-12 58 views
0

我想製作一個rolodex樣式的JSP。我正在使用一個帶有JSP的java類,並且不允許使用servlet或其他任何東西。我無法保留添加的條目。當我去我的添加條目頁面,並添加一個人計數增加一。然後,如果我進入「主頁」頁面,它會從我設置的任何調試開始。另外,如果我嘗試添加第二個人,則計數不會再增加。帶JSP的JSP打印數組

這裏是發生了什麼流量:

開始與4人 - >添加的第一人稱 - >數爲5人 - > 命中主頁鏈接 - >數爲4人

開始與4人 - >添加的第一人稱 - >數爲5人 - > 加2D人物 - >數爲5人

這裏是Java I類有:

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

你如何運行/部署你的應用程序? – serhii

回答

1

在你的方法getCardFromRequest你從getSession().getAttribute("Card")得到您的卡對象,但是當你更新它,並把它放回去會話你把它放回去這樣getSession().setAttribute("card", card)你應該調用setAttribute這樣setAttribute("Card", card)所以你把和檢索同一對象從會話

+0

這麼簡單,但我錯過了它。我不會告訴你我花了多少時間來研究這個想法。我也看到我是如何搞砸這個方法的,這總是我的目標。十分感謝你的幫助。 –