【发布时间】:2019-07-06 04:20:39
【问题描述】:
我正在构建一个在线酒店预订系统。为此,我使用了一个预订车,我在其中跟踪用户添加的房间。当我在浏览器中添加一些房间时,使用 user1 登录,现在当我使用其他浏览器使用 user2 登录并在购物车中添加一些其他房间时。现在,当我尝试在 user1 的购物车中添加另一个房间时,user1 的现有购物车将被 user2 的购物车值替换。我为每个用户维护不同的会话,但所有会话的购物车属性都相同。我目前正在本地主机上工作。请帮忙
这就是我向 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);
}
}
}
【问题讨论】:
-
从您的描述看来您只有一个购物车实例,您将客户购物车保存在哪里?
-
@Dimitris 如何为不同的客户定义不同的购物车。我只是在我的 servlet 代码中将购物车(ArrayList)定义为类变量。它不会为每个会话创建不同的实例吗?
-
它应该,虽然我觉得把它放在一个实际的数据库中更安全,但会话可以被删除。我只是看不到你在哪里声明了你的变量 rblist,如果你用它做了一个 bean,一个明显的错误方法就是。
-
[ .包main.controller;公共类 HotelReservationContoller 扩展 HttpServlet { ArrayList
rbList=new ArrayList (); ArrayList availableRooms = new ArrayList ();公共 HotelReservationContoller() { super(); } ] 。这是我定义列表的地方。上面共享的 doPost 方法在这个类中 -
你为 HotelReservationContoller 制作了一个 bean 吗?