问题描述
我正在建立一个在线酒店预订系统。 为此,我使用的是预订车,其中跟踪用户添加的房间。 当我在浏览器中添加一些房间时,使用user1登录,现在当我使用其他浏览器和user2登录并在购物车中添加其他房间时。 现在,当我尝试在user1的购物车中添加另一个房间时,user1的现有购物车被替换为user2的购物车值。 我为每个用户维护不同的会话,但是所有会话的cart属性都相同。 我目前在本地主机上工作。 请帮忙
这就是我向rbList添加值并设置会话属性的方式。
if(request.getParameter("button").equals("addRoom"))
{ // System.out.println("******************inside addRoom*****************");
if(session!=null)
{
availableRooms = (ArrayList<HotelBean>)session.getAttribute("availableRooms");
int addPos = Integer.parseInt(request.getParameter("roomPosition"));
rb = availableRooms.get(addPos);
String roomID = rb.getRoomId();
HoteDAO hd = new HoteDAO();
boolean available = hd.isAvailable(roomID);
if(available){
if((ArrayList<HotelBean>)session.getAttribute("ReservationCart") == null){
rbList = new ArrayList<HotelBean>();
}
if(rbList == null){
rbList = new ArrayList<HotelBean>();
}
rbList.add(rb);
for(HotelBean room : rbList){
System.out.println(room.getRoomId());
}
session.setAttribute("ReservationCart",rbList);
RequestDispatcher rd=request.getRequestDispatcher("/AvailableRooms.jsp");
rd.forward(request,response);
}
else
{
System.out.println("Sorry the room is not available now");
RequestDispatcher rd=request.getRequestDispatcher("/AvailableRooms.jsp");
rd.forward(request,response);
}
}
}
1楼
您的最后评论是您问题的答案。 您可以在Web应用程序中只有一个实例的类中实例化rbList。 因此,您在所有客户中只有一个rbList,这会引起您的问题。 尽管我对rbList的工作方式没有很清楚的了解,但我相信每个客户都应该拥有自己的唯一rbList或至少自己的购物车。
同样,在控制器中声明客户购物车似乎是一个糟糕的设计选择。
解决问题的方法是创建一个单独的CartModel类,其中包含与购物车相关的所有内容。
创建从CustomerModel到CartModel的一对一或一对多关系。
最好将CartModel(s)保存到数据库中,或者在会话中保存(如果您喜欢这种设计)。
希望我能帮上忙。