繁体   English   中英

HttpSession,session.getAttribute(),问题

[英]HttpSession, session.getAttribute(), problem

我有一个与Java Servlet会话有关的问题。 我不明白为什么在setAttribute();之前使用会话对象的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);

谢谢。

此代码旨在保存回由Register session属性表示的修改后的向量。 但是,即使在删除或添加了某些元素之后,也无需将属性设置回去,因为无论如何多数民众赞成在会话中存储的引用以及对该属性的任何更改本质上都将应用于同一对象。

因为Register属性可能是从其他地方设置的(例如从jsp(在糟糕的情况下),Servlet或Filter。。)

我能想到的唯一解释是:首先检索向量,然后进行更改,然后将其存储回会话对象中。

代码已损坏或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);
}

即创建一个新的向量(如果尚不存在)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM