У меня очень странная ситуация. Я работаю над довольно большим 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 в некоторой точке и сохраняет другие поля. *
Заранее спасибо