powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / httpsession cart
23 сообщений из 23, страница 1 из 1
httpsession cart
    #37864479
Byka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Как правильно добавить значения в корзину?
По чекбоксам, которые отметил пользователь, происходит поиск и извлечение этих записей из бд по id, после чего я в сервлете заношу их в сессию и таким образом каждый раз, когда покупатель добавляет новый товар (не зависимо от того есть уже что то в корзине или нет) сессия полностью перезаписывает данные. Не понимаю, как добавить значения а не перезаписывать их?
Сохраняю полученные из бд данные в ArrayList:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
	ArrayList<DiskBean> ShowCart = new ArrayList<DiskBean>();
	HttpSession session;
ShowCart = DiskDAO.showCart(cart_id); // get checked disks from db 
	session = request.getSession(true);
		DiskBean ShowCart = (DiskBean) session.getAttribute("cart");
		if(ShowCart==null) {
			ShowCart = new DiskBean();
			session.setAttribute("cart", ShowCart);
		}
//а если уже создана сессия, то setAttribute перезапишет все данные, как их дописать?


Делать что то вроде еще одного списка, в который добавлять данные к старым новый выбраный товар, и потом уже его перезаписывать в сессию? но есть же способ проще и более правильный?
Можете еще поделится ссылкой или ли-рой по сессиям, потому что в документации есть методы и-фейса, но нет конкретного ничего про добавление данных...
...
Рейтинг: 0 / 0
httpsession cart
    #37864575
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы хоть пробовали это компилировать?
ArrayList<DiskBean> ShowCart = new ArrayList<DiskBean>();
ShowCart = new DiskBean();
...
Рейтинг: 0 / 0
httpsession cart
    #37864597
Byka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, немного переделал. Но ошибка в том месте, где Вы указали.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
DiskBean IsCart = (DiskBean) session.getAttribute("cart");
		if(IsCart==null) {
			IsCart = new DiskBean();
			session = request.getSession(true);
			session.setAttribute("cart", ShowCart);
		} else {
			for (Iterator itr=tempList.iterator(); itr.hasNext();) {
				tempList.add(IsCart);
			}
			session.setAttribute("cart", tempList);
		}


Как правильно считать данные из сессии в переменную?
...
Рейтинг: 0 / 0
httpsession cart
    #37864610
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приведением типов.
Ты родом из VB? IsCart, ShowCart - это переменные "не по-джавовски" ... даже IDE обычно варнинги дают.
...
Рейтинг: 0 / 0
httpsession cart
    #37864616
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При чем здесь "как правильно считать"? Определитесь что именно вы хотите хранить в сессии?
У вас это или DiskBean IsCart, или ShowCart, или tempList. Дайте внятные имена переменным. Используйте Java нотацию для переменных.
...
Рейтинг: 0 / 0
httpsession cart
    #37864624
Byka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Эм... В документации указано getAttribute - Returns:the object with the specified name
Как правильно привести тип?
Код: java
1.
DiskBean ShowCart = (DiskBean) session.getAttribute("cart");

почему не правильно?
Я родом из неоткуда, всего по чуть - чуть было, как правильно именовать переменные по джавовски?
...
Рейтинг: 0 / 0
httpsession cart
    #37864647
Byka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,
Код: java
1.
2.
3.
4.
if(tempList==null) {
			session = request.getSession(true);
			session.setAttribute("cart", ShowCart);
		} 


то я добавляю атрибут ArrayList<DiskBean> ShowCart
если сессия уже была, то значит товар уже какой то выбран, к нему нужно дабавить новый выбраный товар, а не перезаписывать.
Я в начале темы объяснил, что нужно занести в сессию
...
Рейтинг: 0 / 0
httpsession cart
    #37864674
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блин, ну простейшая же логика. Что вы за ерунду в каждом посте пишете.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
public void addItem(Item item, HttpSession session){
   Cart cart = session.getAttribute("cart")
   if(cart == null){
      cart = new Cart();
      session.setAttribute("cart", cart); 
   }
   cart.add(item);
}
...
Рейтинг: 0 / 0
httpsession cart
    #37864694
Byka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz, я видел этот пример. Извините, но я не понимаю Item и Cart. Item - мои новые данные, здесь считанные
Код: java
1.
ShowCart = DiskDAO.showCart(cart_id); // get checked disks from db 

и Cart - тот ArrayList, который вносится в сессию? Я пытаюсь сделать так же, но на самом начале уже не правильно
Код: java
1.
Cart cart = session.getAttribute("cart")
...
Рейтинг: 0 / 0
httpsession cart
    #37864703
Byka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Типы данных Item и Cart откуда берутся?
...
Рейтинг: 0 / 0
httpsession cart
    #37864710
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BykaИзвините, но я не понимаю Item и Cart
Нет слов. Давайте я за вас сделаю замену.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
public void addDiskBean(DiskBean disk, HttpSession session){
   List<DiskBean> cart = session.getAttribute("cart")
   if(cart == null){
      cart = new ArrayList<DiskBean>();
      session.setAttribute("cart", cart); 
   }
   cart.add(disk);
}
...
Рейтинг: 0 / 0
httpsession cart
    #37864713
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BykaТипы данных Item и Cart откуда берутся?
Вы их напишите, потому что они инкапсулируют реализацию.
Почему любой предмет в вашем магазине это DiskBean. Т.е. вы зарарее закладываете невозможность продавать что либо другое?
Почему showCart это всегда List? А если там нужны будут дополнительные данные помимо товаров?
...
Рейтинг: 0 / 0
httpsession cart
    #37864729
Byka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz, благодраю!
Но вот здесь проблема возникала и у меня
Код: java
1.
List<DiskBean> cart = session.getAttribute("cart");

- cannot convert from Object to List<DiskBean>
пробую приведением типов
Код: java
1.
List<DiskBean> cart = (List<DiskBean>) session.getAttribute("cart");


Но тогда ошибка при попытке добавить товар в корзину
...
Рейтинг: 0 / 0
httpsession cart
    #37864740
Byka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

авторПочему любой предмет в вашем магазине это DiskBean
Тестовое задание, магазин дисков. Правильно организовать интерфейс например Cart - в котором будут методы для товаров, а в бинах реализовывать это все? т.е. каждый бин - определенный тип товара со своими особенностями? Типа там диски, журналы, плееры..
авторПочему showCart это всегда List? А если там нужны будут дополнительные данные помимо товаров?
Вы имеет ввиду например количество заказанного товара или наличие его на складе? Как правильно организовать этот момент?
...
Рейтинг: 0 / 0
httpsession cart
    #37864763
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BykaList<DiskBean> cart = (List<DiskBean>) session.getAttribute("cart");
Но тогда ошибка при попытке добавить товар в корзину
Какая ошибка и как она связана именно с этой строкой? В ошибке четко указано что послужило её причиной.
...
Рейтинг: 0 / 0
httpsession cart
    #37864784
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BykaТестовое задание, магазин дисков.
База данных не в XML, случайно?

BykaПравильно организовать интерфейс например Cart - в котором будут методы для товаров, а в бинах реализовывать это все? т.е. каждый бин - определенный тип товара со своими особенностями? Типа там диски, журналы, плееры..

Товар это Товар, а Корзина это Корзина - внутри они реализуют то что нужно вашему приложению. Это называется инкапсуляция.
В вашем коде, Товар это всегда Диск - т.е. ваш Сервлет или Контроллер должен знать что товар это всегда диск. Т.е. продавать другие товары он не способен.
А Корзина это всегда список Дисков. Она не инкапсулирет логику корзины в вашем случае. Это не совсем ООП.

BykaВы имеет ввиду например количество заказанного товара или наличие его на складе? Как правильно организовать этот момент?
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
interface Item{
}
class Disk implement Item{
}
class Cart{
   List<Item> items;
   void addItem(Item item){
      items.add(item);
   }
}
...
Рейтинг: 0 / 0
httpsession cart
    #37864793
Byka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

threw exception
java.lang.NullPointerException
Но это там где я совсем по быдлокодерски делаю
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
tempList = (ArrayList<DiskBean>) session.getAttribute("cart");
		if(tempList==null) {
			
			session = request.getSession(true);
			session.setAttribute("cart", ShowCart);
		} else {
			for (Iterator itr=tempList.iterator(); itr.hasNext();) {
				tempList.addAll(ShowCart);
			}
			session.setAttribute("cart", tempList);
		}


Если в методе, то нужно
Код: java
1.
public void addDiskBean(DiskBean disk...

а я возращаю из бд данные в виде ArrayList т.е. и в метод я могу отправить свой список и сессию...
делаю так
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
	doPost ....
addDiskBean(ShowCart, session);
	}
	
	public void addDiskBean(ArrayList<DiskBean> disk, HttpSession session){
		ArrayList<DiskBean> cart = (ArrayList<DiskBean>) session.getAttribute("cart");
		   if(cart == null){
		      cart = new ArrayList<DiskBean>();
		      session.setAttribute("cart", cart); 
		   }
		   cart.addAll(disk);
		}


та же ошибка
...
Рейтинг: 0 / 0
httpsession cart
    #37864813
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подозреваю что вас не возьмут. Что такое NullPointerException уже читали? В какой строке происходит смотрели?
...
Рейтинг: 0 / 0
httpsession cart
    #37864829
Byka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz, я пока и не иду. Это для себя выполняю. Базу делаю на Mysql
Вот ShowCart из DiskDAO
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
public static ArrayList<DiskBean> showCart(int[] cart_id) {
		ArrayList<DiskBean> ShowCart = new ArrayList<DiskBean>(); 
		PreparedStatement stmt = null;
		String showQuery = "select * from disk where disk_id=?";
		System.out.println("Query: "+showQuery);
		
		try {
			currentCon = ConnectionManager.getConnection();
			stmt = currentCon.prepareStatement(showQuery);
			for(int i=0; i<cart_id.length; i++){
				stmt.setInt(1,cart_id[i]);
				rs = stmt.executeQuery();
				while (rs.next()) {
					DiskBean disk = new DiskBean();
					disk.setDisk_id(rs.getInt("disk_id"));
					disk.setTitle(rs.getString("title"));
					ShowCart.add(disk);
				}
			}
			for(int i=0; i<ShowCart.size(); i++) {
			System.out.println("Here we are!"+ShowCart.get(i).getTitle()); 
			}
	}
		catch(Exception e) { System.out.println("Showing disks is failed: An Exception has occurred! " + e); }
		finally {
			if(rs !=  null) {
				try { rs.close(); } 
				catch (Exception e) {} rs = null; 
			}
			if (stmt != null) { 
				try { stmt.close(); } 
				catch (Exception e) {} stmt = null; } 
			if (currentCon != null) { try { currentCon.close(); }
			catch (Exception e) { } currentCon = null; } 
		}
		return ShowCart;
}


Исключение возникает когда объект имеет значение null при попытке его использовать. В строке
Код: java
1.
ArrayList<DiskBean> cart = (ArrayList<DiskBean>) session.getAttribute("cart");

А значит либо атрибут еще не был создан (но мы потом это обрабатываем) или проблемы в приведении типов?
...
Рейтинг: 0 / 0
httpsession cart
    #37864830
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NPE в строке
ArrayList<DiskBean> cart = (ArrayList<DiskBean>) session.getAttribute("cart");
может означать одну единственную вещь. session у вас null.
Пошаговую отладку пробовали?
...
Рейтинг: 0 / 0
httpsession cart
    #37864839
Byka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz, сейчас сделаю пошаговую отладку, в этой строке предупреждение Type safety: Unchecked cast from Object to ArrayList<ProjectBean>, это в плане низходящего преобразования проблема?
...
Рейтинг: 0 / 0
httpsession cart
    #37864844
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BykaUnchecked cast from Object to ArrayList<ProjectBean>, это в плане низходящего преобразования проблема?
Типа того. Компилятор предупреждает вас что он не может гарантировать что вы из сессии получите именно ArrayList, соответственно есть вероятность отгрести ClassCastException.
...
Рейтинг: 0 / 0
httpsession cart
    #37864881
Byka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz, я не внимательный, очень!
Код: java
1.
2.
doPost ...[color=red]session = request.getSession(true);[/color]
		addDiskBean(ShowCart, session);


Теперь работает. Одинаковый товар повторяется в списке, это нужно переменную добавить в бине, что бы ввести количество единиц заказанного товара?
Спасибо огромное!!! Ух, тут нужно все переписать заново что бы соблюдались принципи ООП
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / httpsession cart
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]