2014-11-05 35 views
0

Im試圖使用MVC編寫Web應用程序。我有bean,jsp和servlets。 我想完成的事:用戶將能夠在表中創建(購物)列表。桌子上會有一個顯示它創建的日子。然後它將創建3列的行(1-id,2個產品名稱,3個'買入'鏈接)。當用戶點擊「已購買」鏈接時,它將從3列中移除鏈接,並將產品的名稱變爲綠色。 表格外部會有另外一個鏈接,讓用戶創建一個新列表。如果有現有的清單,那麼尚未「購買」的產品會自動進入新清單。一旦用戶點擊「創建新列表」鏈接,它將只顯示新列表(如果有的話還有未購買的產品)。使用jsps更改視圖(來自MVC)

我目前遇到問題:日期不會顯示,直到點擊了購買的鏈接,但點擊它時不會將文本變爲綠色或刪除「已購買」鏈接。

這裏是我的代碼,任何幫助將不勝感激。謝謝。

Item.java

import java.text.Format; 
import java.text.SimpleDateFormat; 
import java.util.Date; 

public class Item { 
//property names 
String name; 
Integer id; 
boolean available = true; 
Format formatter = new SimpleDateFormat("MM/dd/yyyy"); 
String today = formatter.format(new Date()); 

public Item(Integer id, String name, boolean available){ 
    this.id = id; 
    this.name = name; 
    this.available = available; 
} 

public String getToday() { 
    return today; 
} 

public Integer getId() { 
    return id; 
} 

public void setId(Integer id) { 
    this.id = id; 
} 

public String getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name = name; 
} 

public boolean isAvailable() { 
    return available; 
} 

public void setAvailable(boolean available) { 
    this.available = available; 
} 
} 

DisplayList.jsp

<?xml version="1.0" encoding="ISO-8859-1" ?> 
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> 
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> 


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> 
<title>Grocery List</title> 
</head> 
<body> 

<h1>Grocery List</h1> 

<table border='1'> 
<tr><th colspan='3'>${entry.today}</th></tr> 

<c:forEach items="${entries}" var="entry"> 
<tr> 
<td>${entry.id}</td> 
<c:choose> 
    <c:when test="${entry.available != false }"> 
     <td>${entry.name}</td> 
     <td><a href="Bought?id=${entry.id}">Bought</a></td> 
    </c:when> 
    <c:when test="${entry.available != true }"> 
     <td style="color:green;" >${entry.name}</td> 
     <td></td> 
    </c:when> 
</c:choose> 
</tr> 
</c:forEach> 
<tr> 
<form action="Groceries" method="post"> 
<td colspan='2'><input type="text" name="product" /></td> 
<td><input type="submit" name="add" value="Add" /></td> 
<p><input type="button" name="new" value="New List" /></p> 
</form> 
</tr> 
</table> 
</body> 
</html> 

Groceries.java

import java.io.IOException; 
import java.util.ArrayList; 
import java.util.List; 

import javax.servlet.ServletConfig; 
import javax.servlet.ServletException; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

@WebServlet("/Groceries") 
public class Groceries extends HttpServlet { 
private static final long serialVersionUID = 1L; 

int y = 3; 

public Groceries() { 
    super(); 
} 

public void init(ServletConfig config) throws ServletException { 
    super.init(config); 
    List<Item> entries = new ArrayList<Item>(); 
    entries.add(new Item(1, "Milk", true)); 
    entries.add(new Item(2, "Soda", true)); 

    getServletContext().setAttribute("entries", entries); 

} 

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

    request.getRequestDispatcher("/WEB-INF/DisplayList.jsp").forward(request, response); 
} 

@SuppressWarnings("unchecked") 
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

    String name = request.getParameter("product"); 
    Item entry = new Item(y, name, true); 
    y++; 

    List<Item> entries = (List<Item>) getServletContext().getAttribute("entries"); 
    entries.add(entry); 
    response.sendRedirect("Groceries"); 

} 

} 

Bought.java

import java.io.IOException; 
import java.util.List; 

import javax.servlet.ServletException; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

@WebServlet("/Bought") 
public class Bought extends HttpServlet { 
private static final long serialVersionUID = 1L; 

public Bought() { 
    super(); 
} 

/** 
* Given an id, retrieve the List entry. 
*/ 
@SuppressWarnings("unchecked") 
private Item getEntry(Integer id) 
{ 
    List<Item> entries = (List<Item>) getServletContext().getAttribute("entries"); 

    for(Item entry : entries) 
     if(entry.getId().equals(id)) 
      return entry; 

    return null; 
} 

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    // get the entry to be edited 
    Integer id = Integer.valueOf(request.getParameter("id")); 
    Item entry = getEntry(id); 

    // pass the entry to jsp using request scope 
    request.setAttribute("entry", entry); 
    request.getRequestDispatcher("/WEB-INF/DisplayList.jsp").forward(request, response); 
} 

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    // get the entry to be edited 
    Integer id = Integer.valueOf(request.getParameter("id")); 
    Item entry = getEntry(id); 

    // change the entry based on user input 
    entry.setAvailable(true); 

    // send the user back to the guest book page 
    request.getRequestDispatcher("/WEB-INF/DisplayList.jsp").forward(request, response); 
} 

} 
+1

您需要剝離下來你的代碼,以顯示您認爲錯誤是來自一個更具體的區域。這樣,你會得到更快的答覆。 – 2014-11-05 20:06:51

回答

0

下面的鏈接應該替換爲在JSP中映射servlet。

<a href="<c:url value='/Bought'><c:param name='id' value='${entry.id}'/></c:url>">Bought</a> 

doGet方法,你需要設置可靠性條件

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    // get the entry to be edited 
    Integer id = Integer.valueOf(request.getParameter("id")); 
    Item entry = getEntry(id); 
    entry.setAvailable(false); 
    // pass the entry to jsp using request scope 
    request.setAttribute("entry", entry); 
    request.getRequestDispatcher("/WEB-INF/DisplayList.jsp").forward(request, response); 
}