【发布时间】:2018-04-09 17:21:12
【问题描述】:
我观察到 ArrayList 反映了最新的值,但对于 String,它没有
//Initializing List and String
ArrayList<String> list = new ArrayList<String>();
list.add("Item1");
String name = "String1";
//Setting Attribute for both
session.setAttribute("mylist", list);
session.setAttribute("myname", name);
//getting attribute for both
out.println("<br> Printing intial valus <br>");
list = (ArrayList<String>)session.getAttribute("mylist");
for (String s:list){
out.println(s);
}
name = (String) session.getAttribute("myname");
out.println(name);
//updating the values for both
list.add("Item2");
name = "String2";
//Need to add session.setAttribute again for String
//for it to reflect updated value "String 2"
//session.setAttribute("myname", name);
//getting attribute value after the update
list = (ArrayList<String>)session.getAttribute("mylist");
name = (String) session.getAttribute("myname");
//printing the value for both again
out.println("<br><br><br> Prining updated values <br><br>");
for (String s:list){
out.println(s);
}
out.println(name);
下面的输出是
Printing intial valus
Item1 String1
Prining updated values
Item1 Item2 String1 Session 2
在更新值部分,它不应该打印“String2”,但对于 ArrayList,它也打印“Item2”。如果我在更新字符串名称值之后手动添加session.setAttribute("myname", name),那么它会打印“String2”。但是 ArrayList 不需要这个 session.setAttribute
【问题讨论】:
-
我认为当您将
name添加到会话属性时,它的值会被复制。这就是为什么在您再次添加之前看不到它更新的原因。而list指向一个在您调用add()时确实会更新的对象,因此您无需进一步操作即可看到更新。
标签: java jsp session-state