Атрибуты сеанса реплицируются для разных пользовательских сеансов. - PullRequest
0 голосов
/ 12 февраля 2019

Я строю онлайн систему бронирования отелей.для этого я использую корзину бронирования, в которой я отслеживаю комнаты, добавленные пользователем.Когда я добавляю некоторые комнаты в браузере, входите в систему с помощью 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);
                }
            }

        }

1 Ответ

0 голосов
/ 12 февраля 2019

Ваш последний комментарий является ответом на вашу проблему.Вы создаете экземпляр rbList в классе, который имеет только один экземпляр в вашем веб-приложении.Следовательно, у вас есть только один список rbList среди всех клиентов, и это вызывает вашу проблему.Хотя у меня нет четкого представления о том, как работает ваш rbList, я уверен, что у каждого покупателя должен быть свой уникальный rbList или, по крайней мере, собственная корзина.

Кроме того, объявление корзины покупателя в контроллере кажется неудачным выбором дизайна.

Я бы решил вашу проблему, создав отдельный класс CartModel, содержащий все, что связано с корзиной.

Создайте отношение один к одному или один ко многим из вашей CustomerModel в вашу CartModel.

Желательно сохраните CartModel в вашу базу данных или в сеанс, если вы предпочитаете использовать этот дизайн.

Надеюсь, я помог.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...