В моем классе действий есть следующий код:
MemberData mbr = MyUtil.getMember(request.getSession());
:::::::::::::::::::::::
{
List sysList = mbr .getSystemList(); //returns 'systemList'
sysList.addAll(mbr .getUserEnteredList()); //add user entered to the system entered objects list
addWorksheetFor(wb, sysList); //add the list to an excel workbook
}
У меня есть MemberData в сеансе, и он содержит список, скажем, systemList. Когда я использую List sysList = mbr.getSystemList()
, а затем добавляю введенный пользователем список, 'systemList' в объекте сеанса изменяется. Я добавляю два списка в локальную переменную 'sysList', но переменная сеанса 'systemList' также модифицируется. Это становится таким же, как 'sysList'.
Однако, когда я перебираю systemList и userEnteredList отдельно и добавляю в третий список, как показано ниже:
MemberData mbr = MyUtil.getMember(request.getSession());
:::::::::::::::::::::::
{
List sysList = mbr .getSystemList(); //returns 'systemList'
List userList = mbr .getUserEnteredList(); //returns 'userEnteredList'
List allList = new ArrayList();
for (Iterator it=sysList.iterator(); it.hasNext();)
allList.add(it.next());
for (Iterator it=userList.iterator(); it.hasNext();
allList.add(it.next());
addWorksheetFor(wb, sysList); //add the list to an excel workbook
}
Тогда это работает. В этом случае переменная сеанса не изменяется.
Есть идеи?