有没有大神帮忙一下,我知道是ArrayList不能转为我这个类型,但我不知道怎么修改啊!!!!主要是在deleteItem方法中
ShoppingCart:
package com.ch.experience.chapter_4_1;
import java.util.*;
public class ShoppingCart {
List<ShoppingItem> items=null;
public ShoppingCart(List<ShoppingItem> items) {
this.items = items;
}
public List<ShoppingItem> getItems(){
return items;
}
public void remove(Integer productId){
if (productId!=null){
ShoppingItem sitm=items.get(productId);
sitm.setQuantity(sitm.getQuantity()-1);
if (sitm.getQuantity()<=0){
items.remove(sitm);
}
}
}
}
ShoppingCartServlet:
package com.ch.experience.chapter_4_1;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
@WebServlet(name = "ShoppingCartServlet",urlPatterns = {"/products","/viewProductDetails","/addToCart","/viewCart","/deleteItem"})
public class ShoppingCartServlet extends HttpServlet {
private ArrayList<Product> products=new ArrayList<Product>();
@Override
public void init() throws ServletException{
products.add(new Product(1,"单反相机","尼康性价比最高的单反相机",4159.95F));
products.add(new Product(2,"三星手机","三星公司的最新iPhone5产品",1199.95F));
products.add(new Product(3,"笔记本电脑","联想公司的新一代产品",5129.95F));
products.add(new Product(4,"平板电脑","苹果公司的新产品",1239.95F));
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String uri=request.getRequestURI();
if (uri.endsWith("/products")){
showProductList(response);
}else if (uri.endsWith("/viewProductDetails")){
showProductDetails(request,response);
}else if (uri.endsWith("/viewCart")){
showCart(request,response);
}else if (uri.endsWith("/deleteItem")){
deleteItem(request,response);
}
}
private void showCart(HttpServletRequest request, HttpServletResponse response) throws IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<html><head><title>购物车</title></head>");
out.println("<body><a href='products'>"+"商品列表</a>");
HttpSession session=request.getSession();
ArrayList<ShoppingItem> cart= (ArrayList<ShoppingItem>) session.getAttribute("cart");
if (cart!=null){
out.println("<table>");
out.println("<tr><td style='width:50px'>数量"+"</td>"
+"<td style='width:80px'>商品</td>"+"<td style='width:80px'>价格</td>"
+"<td style='width:80px'>小计</td>"+"<td style='width:80px'>是否删除</td></tr>");
double total=0.0;
for (ShoppingItem shoppingItem:cart) {
Product product=shoppingItem.getProduct();
int quantity=shoppingItem.getQuantity();
if (quantity!=0){
float price=product.getPrice();
out.println("<tr>");
out.println("<td>"+quantity+"</td>");
out.println("<td>"+product.getName()+"</td>");
out.println("<td>"+price+"</td>");
double subtotal=((int)(price*quantity*100+0.5))/100.0;
out.println("<td>"+subtotal+"</td>");
out.println("<td><a href=deleteItem?id="+product.getId()+">"+"删除</a>"+"</td>");
total+=subtotal;
out.println("</tr>");
}
}
out.println("<tr><td colspan='4'"+"style='text-align:right'>"+"总计:"+total+"</td></tr>");
out.println("</table>");
}
out.println("</table></body></html>");
}
private void showProductDetails(HttpServletRequest request, HttpServletResponse response) throws IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out= response.getWriter();
int productId=0;
try {
productId=Integer.parseInt(request.getParameter("id"));
}catch (NumberFormatException e){
}
Product product =getProduct(productId);
if (product!=null){
out.println("<html><head>"+"<title>商品详细信息</title></head>"+"<body><p>商品详细信息</p>"
+"<form method='post' action='addToCart'>");
out.println("<input type='hidden' name='id'"+"value='"+productId+"'/>");
out.println("<table>");
out.println("<tr><td>商品名:</td><td>"+product.getName()+"</td></tr>");
out.println("<tr><td>说明:</td><td>"+product.getDescription()+"</td></tr>");
out.println("<tr><td>价格:</td><td>"+product.getPrice()+"</td></tr>");
out.println("<tr>"+"<tr>"+"<td><input name='quantity'/></td>"+"<td><input type='submit' value='购买'/>"+"</td>"+"</tr>");
out.println("<tr><td colspan='2'>"+"<a href='products'>商品列表</a>"+"</td></tr>");
out.println("</table>");
out.println("</form></body>");
}else {
out.println("No product found");
}
}
private Product getProduct(int productId) {
for (Product product:products) {
if (product.getId()==productId){
return product;
}
}
return null;
}
private void showProductList(HttpServletResponse response) throws IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out= response.getWriter();
out.println("<html><head><title>商品列表</title>"+"</head><body><p>商品列表</p>");
out.println("<ul>");
for (Product product:products){
out.println("<li>"+product.getName()+"("+product.getPrice()+")("
+"<a href='viewProductDetails?id="+product.getId()+"'>详细信息</a>)");
}
out.println("</ul>");
out.println("<a href='viewCart'>查看购物车</a>");
out.println("</body></html>");
}
private void deleteItem(HttpServletRequest request, HttpServletResponse response) throws IOException {
HttpSession session=request.getSession();
ShoppingCart cart= (ShoppingCart) session.getAttribute("cart");
try {
int id=Integer.parseInt(request.getParameter("id"));
ShoppingItem item=null;
for (ShoppingItem shoppingItem1: cart.getItems()){
if (shoppingItem1.getProduct().getId()==id){
item=shoppingItem1;
break;
}
}
assert item != null;
cart.remove(item.getProduct().getId());
}catch (NumberFormatException e){
System.out.println(e.getMessage());
}
session.setAttribute("cart",cart);
response.sendRedirect("viewCart");
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
int productId = 0;
int quantity = 0;
try {
productId = Integer.parseInt(request.getParameter("id"));
quantity = Integer.parseInt(request.getParameter("quantity"));
} catch (NumberFormatException e) {
}
Product product = getProduct(productId);
if (product != null && quantity >= 0) {
ShoppingItem shoppingItem = new ShoppingItem(product, quantity);
HttpSession session = request.getSession();
ArrayList<ShoppingItem> cart = (ArrayList<ShoppingItem>) session.getAttribute("cart");
if (cart == null) {
cart = new ArrayList<ShoppingItem>();
session.setAttribute("cart", cart);
}
cart.add(shoppingItem);
}
showProductList(response);
}
}
133 行 ShoppingCart cart= (ShoppingCart) session.getAttribute("cart"); 如果是这个强转错误的话,可以在上面打印出 session.getAttribute("cart")这个数据的json数据,如果是ArrayList,可以使用list接收,然后获取第一个数据,判断数据类型 if( xx.class instanceof ShoppingCart.class ){ // 再强转} 。这样就安全些,不会抛异常
给个错误行数?