如何在JSP中迭代列表对象?

时间:2014-10-19 16:56:10

标签: java hibernate

我有ShoppingCart类:

package shoppingcart;

import models.CD;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class ShoppingCart {

    private List<CD> shoppingCartItemList ;
    private long totalPrice ; 

    public ShoppingCart() 
    {
        shoppingCartItemList = new ArrayList<CD>() ;
        totalPrice = 0 ; 
    }

    public void addCdToCart(CD cd)
    {
        shoppingCartItemList.add(cd) ;
        totalPrice += cd.getPrice();
    }

    public List<CD> getShoppingCartItems() 
    {
        return this.shoppingCartItemList ;
    }

    public long getTotalPrice() 
    {
        return totalPrice;
    }

}

我在servlet中使用这个类:

ShoppingCart shoppingCart = new ShoppingCart();

CD cd = new CD(1, "DAVID", 10, 1);
shoppingCart.addCdToCart(cd);

request.getSession().setAttribute("shoppingCart", shoppingCart);
request.setAttribute("servletMessage", "CD added to Cart");     

正如你所看到的,我有一个列表,我必须在我的jsp中迭代它。我在jsp中导入ShoppingCard类:

<%@ page import="shoppingcart.ShoppingCart"%>
<c:forEach items="${shoppingCart.getShoppingCartItems}" var="cart">
<form method="POST"     action="${pageContext.request.contextPath}/removeFromCart">
<input type="hidden" name="cdId" value="${cart.title}" />
<tr>
<td><c:out value="${cart.title}" /></td>
<td align="center"><c:out value="${cart.category}" /></td>
<td align="center"><c:out value="${cart.price}" /></td>
<td align="center" width="25%"><input type="submit" value="Remove"  name="action" style="height:30px; width: 70px;font-size:10pt;"></td>
</tr>
</form>
</c:forEach>

我收到此错误:

org.apache.jasper.el.JspPropertyNotFoundException: /myCart.jsp(85,4) '${shoppingCart.getShoppingCartItems}' Property 'getShoppingCartItems' not found on type shoppingcart.ShoppingCart. What can I solve this problem?

我应该改变什么吗?

由于额外添加的代码而编辑。

2 个答案:

答案 0 :(得分:1)

购物车存储在名为“shoppingCart”的属性中。所以它应该像

<c:forEach items="${shoppingCart.xxx}" ...

其中xxx是允许访问ShoppinCart实例内的列表的属性。但是你没有这样的财产。因此,在ShoppingCart中添加以下方法:

 public List<CD> getElements() {
     return this.shoppingCartItemList;
 }

并使用

<c:forEach items="${shoppingCart.elements}" ...

请注意,将“shoppingCartItemList”命名为“ShoppinCart”类的属性是多余且冗长的。这就是为什么我选择为吸气者命名getElements()shoppingCart.elementsshoppingCart.shoppingCartItemList更容易阅读和自然。您还应将私有字段重命名为elements

答案 1 :(得分:0)

我建议您使用JSTL来迭代JSP中的对象

这是一个与此类似的案例: JSTL iterate over list of objects

这是一个例子: http://www.journaldev.com/2090/jstl-tutorial-with-examples-jstl-core-tags

这是一个jstl教程: http://www.tutorialspoint.com/jsp/jsp_standard_tag_library.htm

它有更多东西可以拥有更好的源代码。 我希望这可以帮助你...