HttpSession, session.getAttribute (), проблема - PullRequest
0 голосов
/ 12 апреля 2011

У меня проблема с сеансами сервлетов Java.Я не понимаю, почему функция getAttribute() объекта сеанса используется раньше setAttribute(); Вот код:

Vector buylist=(Vector)session.getAttribute("Register");
if (action.equals("del")) {
String del = request.getParameter("deli");
int d = (new Integer(del)).intValue();
buylist.removeElementAt(d);
}
session.setAttribute("Register", buylist);

Спасибо.

Ответы [ 4 ]

1 голос
/ 12 апреля 2011

Этот код предназначен для сохранения измененного вектора, представленного атрибутом Сеанса регистрации.Однако вам не нужно устанавливать атрибут обратно даже после того, как некоторые элементы удалены или добавлены, потому что его ссылка в любом случае сохраняется в сеансе, и любые изменения в нем по существу применяются к тому же объекту.

0 голосов
/ 12 апреля 2011

Единственное объяснение, которое я могу придумать: сначала вы извлекаете вектор, затем вносите изменения и после сохраняете его обратно в объект сессии.

0 голосов
/ 12 апреля 2011

Код либо сломан, либо setAttribute() бесполезен.

Если вы получаете изменяемый контейнер (например, список или вектор) из сеанса, то нет необходимости помещать его снова в сеанс. Это эквивалент этого кода:

 session.setAttribute("Register", buylist);
 session.setAttribute("Register", buylist);
 session.setAttribute("Register", buylist);

Нет, но первая строка имеет эффект.

Другая возможность состоит в том, что в коде есть ошибка, и на самом деле это означало следующее:

Vector buylist = session.getAttribute("Register");
if( buylist == null ) {
    buylist = new Vector();
    session.setAttribute("Register", buylist);
}

т.е. создайте новый вектор, если он еще не существует.

0 голосов
/ 12 апреля 2011

Поскольку атрибут Register может быть установлен из другого места (например, из jsp (в плохом случае), из сервлета или фильтра.)

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