标签:for dha ret ota 方法 控制 style ref 相同
在做购物车时,控制台报出了这样的问题:
java.lang.RuntimeException: 方法内部错误org.apache.jasper.JasperException: An exception occurred processing JSP page /item/jsps/cart/list.jsp at line 74
71: <th>小计</th>
72: <th>操作</th>
73: </tr>
74: <c:forEach items="${sessionScope.cart.cartItems}" var="cartitem">
75: <tr>
76: <td><div><img src="<c:url value=‘/item/${cartitem.book.image}‘/>"/></div></td>
77: <td>${cartitem.book.bname}</td>
购物车JSP部分的代码如下:
购物车类cart的bean代码为:
public class Cart {
Map<String,CartItem> cart = new LinkedHashMap<String,CartItem>();
//添加购物车
public void add(CartItem item){
//获取book
Book book = item.getBook();
int num = item.getCount();
//更新条目
if(cart.containsKey(book.getBid())){
//获取旧条目
CartItem oldItem = cart.get(book.getBid());
oldItem.setCount(oldItem.getCount()+num);
cart.put(book.getBid(), oldItem);
}else{
cart.put(book.getBid(), item);
}
}
public Collection<CartItem> getCartItems() {
return cart.values();
}
}
仔细查找后发现,原来是由于没有写getCartItems()方法,导致el表达式在读取Javabean的时候没有办法获取到数据。并且还要注意的是属性名应该是方法名去掉get以后的首字母小写即${sessionScope.cart.cartItems}与getCartItems()方法红色部分首字母小写后相同,添加该方法后正常。
-------------------------------------------------------------------------------------------------------------------------------
这里还有一个小注意,需要理解
在cartServlet中需要增删购物车中的条目时,需要首先从session中获取购物车对象,而不是new cart()对象,否则操作的并不是同一个对象
例如:cartbean为
//删除购物车
public String delete(HttpServletRequest request, HttpServletResponse response){
//获取表单项Id
String bid = request.getParameter("bid");
//获取存储在session中的cart,并操作其属性
//注意区分这里不是new Cart().delete(bid);这样的话相当于
//又创建了一个cart对象,而不是操作session里的cart对象
//这里自始至终都在操作session里的cart对象
Cart cart = (Cart)request.getSession().getAttribute("cart");
cart.delete(bid);
return "f:/item/jsps/cart/list.jsp";
}
标签:for dha ret ota 方法 控制 style ref 相同
原文地址:http://www.cnblogs.com/itzfz/p/6130701.html