0 0

购物车中只能添加一个商品,第二次添加就会把第一次给覆盖掉了,怎么办?5

action中的代码如下:
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.interceptor.SessionAware;
import com.opensymphony.xwork2.ActionSupport;
import ez.store.pojo.Book;
import ez.store.pojo.User;
import ez.store.service.UserService;
import ez.store.util.CartItem;
public class OrderCartItemAction extends ActionSupport implements SessionAware{
	private UserService userService;
	private Map session;
	private CartItem ci;
	
	public Map getSession() {
		return session;
	}

	public void setSession(Map session) {
		this.session = session;
	}

	public UserService getUserService() {
		return userService;
	}

	public void setUserService(UserService userService) {
		this.userService = userService;
	}

	// 用于将商品放到购物车里面
	public String addBookToCart() {
		HttpServletRequest request = ServletActionContext.getRequest();
		Book book = (Book) session.get("book");
		int score = user.getScore();
		String bname = book.getBname();
		double price = book.getPrice();
		int amount = Integer.parseInt(request.getParameter("amount"));
		ci=new CartItem();
		Date date = new Date();
		Map map = new HashMap();
		ci.setBname(bname);
		ci.setPrice(price);
		ci.setAmount(amount);
		map.put(date,ci);
		session.put("list",map);
		return "success";
	}
}

然后就在jp页面接受"list"的值用c:if迭代,但是现在每次只能添加一个商品信息进购物车,且第二次添加的会把第一次添加的给覆盖掉。问题好像是因为每次调用这个action都会重新去new一次,但是就是不知道该如何解决?求指点。

问题补充:int score = user.getScore();  这个话是多余的
 
2012年12月09日 22:38

7个答案 按时间排序 按投票排序

0 0

采纳的答案


List<CartItem> list = null;
Object obj =  session.get("list");
if(obj != null){
    list = (List<CartItem>) obj;
}else{
    list = new ArrayList<CartItem>();
    session.put("list",list);
}
//list.add 商品
......

2012年12月10日 09:26
0 0

购物车的功能用Cookie来做的,购物车的信息还要保存在数据库的

1、用户没有登录
  Cookie[] cookies = ServletActionContext.getRequest().getCookies();
  遍历cookies,判断
  1,1、如果它不为空或长度大于0,将Cookie的值序列化成java对象集合,假设为previousOrderCartItemList,遍历previousOrderCartItemList,将当前商品的ID跟数据库取出来的做对比
    1.1.1、如果相同,增加该Cookie的商品数量即可
    1.2.1、如果不相同,追加这件商品到Cookie

  1.2、如果它不存在,则把商品放进Cookie里

2、用户已经登录,直接根据用户去数据库取Cookie信息,剩下的基本相同了

2012年12月11日 02:56
0 0

给你一个免费下载源码csdn的地址,里面有一个完整的购物车项目,你可以下载来参考一下,有你说的bug解决:http://download.csdn.net/detail/tianyazaiheruan/4778368

2012年12月10日 22:15
0 0

个人觉得你的HashMap map = new HashMap()这里不应该new一个新的map,而应该从session中取出map。

如果是认为的每一次访问action类都会被new一个新的对象:
struts2的action是多例的,意思就是每一次访问都会重新new一个该action类的对象,这样是为了简化多线程的编程,所过你使用了spring容器来管理action,那可以通过配置scope的值来配置action为session级别的单例,这样同一个session的同一个action只有一个对象,也就不会出现你所说的覆盖问题,但是没有用spring的话,可以每次购物的数值都存进数据库,或者如“jinnianshilongnian”所说的那4条去做。

2012年12月10日 17:02
0 0

我觉得应该在数据库中保存购物车信息,而不仅仅在session中保持,这样可以查询数据库获取已选购的商品再最近现在选购的商品。

2012年12月10日 11:33
0 0

因为每一次都新Map map = new HashMap();了一下,所以Session里面当然只存在一条。
应该先从Session里面取出来list,然后再往里面追加。

当然,要判断物品是否已经购买过

2012年12月09日 23:15
0 0

购物车中只能添加一个商品,第二次添加就会把第一次给覆盖掉了,怎么办?


你的用法也是不对的
        ci=new CartItem(); 
        Date date = new Date(); 
        Map map = new HashMap(); 
        ci.setBname(bname); 
        ci.setPrice(price); 
        ci.setAmount(amount); 
        map.put(date,ci); 
        session.put("list",map); 
应该是这样的
List<CartItem> list = ...;
session.put("cartList", list);

购物车 添加产品算法一般是:
0、首先从如cookie/session中获取list,如果没有new一个新的放入
1、检查list有没有 如果没有创建一个
2、否则 获取该商品并增加数量
3、保存list到cookie/session中

2012年12月09日 22:48

相关推荐

    网趣网上购物系统的部分特点与精华

    可以选择网站的任意4款商品一次横向排开,对比商品的各项功能和参数,方便用户选择购买商品,并可把对比的商品直接放入购物车进行购买,让用户购买商品更方便、更直观。 二四、支持商品复制功能 很多时候,一个个...

    网趣网上购物系统时尚版V13.0

    可以选择网站的任意4款商品一次横向排开,对比商品的各项功能和参数,方便用户选择购买商品,并可把对比的商品直接放入购物车进行购买,让用户购买商品更方便、更直观。 二四、支持商品复制功能 很多时候,一个个...

    jmeter5.1_CSV自定义.zip

    在购物车测试中,每个用户可以有不同的商品选择,提高测试覆盖率。 5. **使用方法**: 首先,解压"jmeter5.1_CSV自定义.zip",替换原有的JMeter安装目录中的相关jar文件。然后,在CSV Data Set Config配置元件中...

    技术架构.docx

    整体来看,这份文档旨在描述一个典型的技术架构方案,覆盖了从技术选型到具体实现的各个环节。通过对这些内容的详细解析,不仅可以帮助项目团队更好地理解和执行技术方案,还能够为后续的维护和扩展打下坚实的基础。...

    最土团购商业版v2.0免费源码

    最土团购商业版v2.0是一款开源的团购系统,主要针对中小企业或个人开发者,提供了一个免费的在线团购平台解决方案。这款系统的核心在于其源代码的开放性,允许用户自由地进行二次开发和定制,以适应不同的业务需求。...

    ECSHOP六脉神剑(开发必看)

    【ECSHOP六脉神剑】是针对ECSHOP电子商务系统开发的一套详细的教程,对于想要进行ECSHOP二次开发的开发者来说,这是一个非常重要的参考资料。ECSHOP是一个开源的网上商店系统,它提供了丰富的功能和灵活的模板机制,...

    uniapp商城,小程序

    uniapp是一个基于Vue.js的多端开发框架,它允许开发者编写一次代码,即可在iOS、Android、H5、微信小程序、支付宝小程序、百度小程序等多个平台上运行,大大提高了开发效率。 【uniapp】是这个项目的核心,它提供了...

    2020_Web系统与技术_作业要求1

    第一次作业只需提交静态HTML和CSS文件,而第二次作业则需要提交完整的前后端源代码、描述文档和功能展示视频。提交的文件应按照规定的格式命名并压缩,通过邮件发送至指定助教邮箱。 总的来说,这个作业全面覆盖了...

    PHP开发仿湘小林本地网上商城源码PC+手机WAP端.zip

    6. **购物车功能**:实现商品添加、删除、数量调整,并在用户会话中持久化购物车状态。 7. **订单管理**:包括订单创建、状态跟踪、退款退货处理等环节。 8. **用户系统**:注册、登录、密码找回、用户资料管理等...

    ThinkPHP5商城项目实战视频教程课件源码.zip_spend9kd_thinkPhp5 源码_thinkphp5_thin

    7. **购物车与订单**:这部分内容涵盖购物车的实现,包括添加商品、修改数量、删除商品等功能,以及订单的生成、支付、发货、退款等流程。 8. **商品管理**:学习如何设计和实现商品分类、品牌管理、库存控制等模块...

    简单分栏式商城个人中心页功能集程序源码.zip

    该压缩包文件“简单分栏式商城个人中心页功能集程序源码.zip”包含了一个用于构建电子商务网站个人中心页面的源代码实现。个人中心页在电商网站中是至关重要的,它通常承载着用户账户管理、订单查看、收货地址管理、...

    基于WEB网上书店购物管理系统

    系统通常包括用户模块、商品模块、购物车模块、订单模块、支付模块等多个子模块,覆盖了从浏览到交易完成的整个流程。 二、Web设计与开发 Web设计主要关注用户体验和界面美观,需要考虑到不同设备的适配性。开发则...

    ASP.NET开发典型模块大全(C#)23到26章源码

    学习本书读者可以了解各个领域的特点,能够针对某一行业进行软件开发,也可以通过光盘中提供的模块源代码进行二次开发,以减少开发系统所需要的时间。本书适合各级软件开发人员学习使用,也可供大、中专院校师生学习...

    qingchengcode_rainh3i_richh5x_商城后台开发_

    【标题】"qingchengcode_rainh3i_richh5x_商城后台开发_" 提供的是一款基于RainH3I和RichH5X技术的商城后台开发源代码,这通常是一个完整的电子商务平台的后端实现,用于处理订单管理、商品库存、用户账户、支付集成...

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    安卓上用于加载的Webview视图窗口只是作为类浏览器而存在,在安卓上更是只能同时运行一个Webview。(2)跨域数据交互问题。不同的Webview之间无法共享数据。(3)页面自适应问题。页面难以兼容适应不同分辨率的设备...

    基于springboot的网上购物商城系统源码数据库.doc

    - **购物车管理**:用户可将感兴趣的商品添加至购物车,并进行数量调整、删除等操作。 - **订单管理**:用户下单购买商品后,可在订单管理页面查看订单状态、修改收货地址等信息。 - **支付管理**:集成第三方支付...

    基于ssm+Vue的网页版电子商城.zip

    3. 购物车模块:用户可以添加商品至购物车,进行数量调整、选择购买、合并结算等操作。 4. 订单模块:包含订单创建、支付、发货、收货、评价等一系列流程,集成第三方支付接口如支付宝、微信支付,提供便捷的支付...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part1

    实例128 获取数组中最后一个元素 158 实例129 去除数组中的重复元素 158 实例130 字符串与数组的转换 159 实例131 对数组元素进行随机排序 160 实例132 随机抽取数组中元素 161 实例133 二维数组的输出 162 实例134 ...

Global site tag (gtag.js) - Google Analytics