Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / httpsession cart / 23 сообщений из 23, страница 1 из 1
03.07.2012, 14:30:13
    #37864479
Byka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
httpsession cart
Добрый день.
Как правильно добавить значения в корзину?
По чекбоксам, которые отметил пользователь, происходит поиск и извлечение этих записей из бд по 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
03.07.2012, 14:58:16
    #37864575
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
httpsession cart
Вы хоть пробовали это компилировать?
ArrayList<DiskBean> ShowCart = new ArrayList<DiskBean>();
ShowCart = new DiskBean();
...
Рейтинг: 0 / 0
03.07.2012, 15:08:09
    #37864597
Byka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
httpsession cart
Да, немного переделал. Но ошибка в том месте, где Вы указали.
Код: 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
03.07.2012, 15:11:57
    #37864610
IDVsbruck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
httpsession cart
Приведением типов.
Ты родом из VB? IsCart, ShowCart - это переменные "не по-джавовски" ... даже IDE обычно варнинги дают.
...
Рейтинг: 0 / 0
03.07.2012, 15:12:51
    #37864616
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
httpsession cart
При чем здесь "как правильно считать"? Определитесь что именно вы хотите хранить в сессии?
У вас это или DiskBean IsCart, или ShowCart, или tempList. Дайте внятные имена переменным. Используйте Java нотацию для переменных.
...
Рейтинг: 0 / 0
03.07.2012, 15:16:22
    #37864624
Byka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
httpsession cart
Эм... В документации указано getAttribute - Returns:the object with the specified name
Как правильно привести тип?
Код: java
1.
DiskBean ShowCart = (DiskBean) session.getAttribute("cart");

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


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

Код: 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
03.07.2012, 15:45:01
    #37864694
Byka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
httpsession cart
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
03.07.2012, 15:49:13
    #37864703
Byka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
httpsession cart
Типы данных Item и Cart откуда берутся?
...
Рейтинг: 0 / 0
03.07.2012, 15:52:47
    #37864710
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
httpsession cart
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
03.07.2012, 15:55:30
    #37864713
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
httpsession cart
BykaТипы данных Item и Cart откуда берутся?
Вы их напишите, потому что они инкапсулируют реализацию.
Почему любой предмет в вашем магазине это DiskBean. Т.е. вы зарарее закладываете невозможность продавать что либо другое?
Почему showCart это всегда List? А если там нужны будут дополнительные данные помимо товаров?
...
Рейтинг: 0 / 0
03.07.2012, 16:00:12
    #37864729
Byka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
httpsession cart
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
03.07.2012, 16:04:36
    #37864740
Byka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
httpsession cart
Blazkowicz,

авторПочему любой предмет в вашем магазине это DiskBean
Тестовое задание, магазин дисков. Правильно организовать интерфейс например Cart - в котором будут методы для товаров, а в бинах реализовывать это все? т.е. каждый бин - определенный тип товара со своими особенностями? Типа там диски, журналы, плееры..
авторПочему showCart это всегда List? А если там нужны будут дополнительные данные помимо товаров?
Вы имеет ввиду например количество заказанного товара или наличие его на складе? Как правильно организовать этот момент?
...
Рейтинг: 0 / 0
03.07.2012, 16:12:04
    #37864763
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
httpsession cart
BykaList<DiskBean> cart = (List<DiskBean>) session.getAttribute("cart");
Но тогда ошибка при попытке добавить товар в корзину
Какая ошибка и как она связана именно с этой строкой? В ошибке четко указано что послужило её причиной.
...
Рейтинг: 0 / 0
03.07.2012, 16:18:53
    #37864784
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
httpsession cart
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
03.07.2012, 16:22:28
    #37864793
Byka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
httpsession cart
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
03.07.2012, 16:28:48
    #37864813
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
httpsession cart
Подозреваю что вас не возьмут. Что такое NullPointerException уже читали? В какой строке происходит смотрели?
...
Рейтинг: 0 / 0
03.07.2012, 16:36:45
    #37864829
Byka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
httpsession cart
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
03.07.2012, 16:38:04
    #37864830
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
httpsession cart
NPE в строке
ArrayList<DiskBean> cart = (ArrayList<DiskBean>) session.getAttribute("cart");
может означать одну единственную вещь. session у вас null.
Пошаговую отладку пробовали?
...
Рейтинг: 0 / 0
03.07.2012, 16:42:26
    #37864839
Byka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
httpsession cart
Blazkowicz, сейчас сделаю пошаговую отладку, в этой строке предупреждение Type safety: Unchecked cast from Object to ArrayList<ProjectBean>, это в плане низходящего преобразования проблема?
...
Рейтинг: 0 / 0
03.07.2012, 16:44:22
    #37864844
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
httpsession cart
BykaUnchecked cast from Object to ArrayList<ProjectBean>, это в плане низходящего преобразования проблема?
Типа того. Компилятор предупреждает вас что он не может гарантировать что вы из сессии получите именно ArrayList, соответственно есть вероятность отгрести ClassCastException.
...
Рейтинг: 0 / 0
03.07.2012, 16:59:52
    #37864881
Byka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
httpsession cart
Blazkowicz, я не внимательный, очень!
Код: java
1.
2.
doPost ...[color=red]session = request.getSession(true);[/color]
		addDiskBean(ShowCart, session);


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


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