В атрибуте сеанса отсутствует список - PullRequest
1 голос
/ 22 марта 2012

У меня очень странная ситуация. Я работаю над довольно большим Java-приложением со многими ошибками, и я нашел это сегодня.

Я попытаюсь объяснить ситуацию, не публикуя код, потому что методы слишком длинные, и я определил и выделил конкретную проблему. Вот оно:

У меня установлен атрибут сеанса для класса Controller. Атрибут имеет несколько полей, пару строк, пару int и ArrayList определенного типа объекта. Это установлено так:

request.getSession().setAttribute(Constants.SESSION_LIST_SEARCH, beanList);

Тогда есть еще один класс Controller, где мне нужно прочитать этот атрибут, он выглядит так:

request.getSession().getAttribute(Constants.SESSION_LIST_SEARCH);

Когда контроллер получает атрибут (с правильным приведением), поля Strings и int присутствуют, но ArrayList пуст.

Я не смог найти ответ, поэтому в отчаянии я попытался «клонировать» список, чтобы посмотреть, что произошло, и все выглядит так:

request.getSession().setAttribute(Constants.SESSION_LIST_SEARCH, beanList);
/* Desperate developer */
ArrayList<ActivityBean> duplicatedList = new ArrayList<ActivityBean>();
for(ActivityBean foo:beanList.getActivityBean()){
    duplicatedList.add(foo);
}
request.getSession().setAttribute("duplicatedList",duplicatedList);

Этот обходной путь делает свое дело (теперь я могу правильно прочитать "duplicatedList" bean-компонента из сеанса), но не совсем правильно, что оригинальный bean-компонент теряет ArrayList в некоторой точке и сохраняет другие поля. *

Заранее спасибо

1 Ответ

0 голосов
/ 23 марта 2012

Кажется, что где-то еще в вашем приложении какой-то код модифицирует List (так как вы сказали, что это не null, а пусто - если бы оно было null, я бы ожидал, что оно было удалено из контекста в все по какой-то другой части кода). Может быть, после помещения List в контекст какой-то код все еще поддерживает ссылку и работает с ней?

Вы можете попробовать сделать следующее:

request.getSession().setAttribute(Constants.SESSION_LIST_SEARCH, Collections.unmodifiableList(beanList));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...