0

假设我创建了一个 Customer 变量并将其放入我的会话中:

FacesContext.getCurrentInstance().getExternalContext()
    .getSessionMap().put("currentUser", currentUser);

然后,假设我对这个对象进行了一些更改。我首先从会话中获取 Customer 对象,通过以下方式对其进行一些更改:

//Do the changes, set username again etc.
Customer currentCustomer = (Customer)FacesContext.getCurrentInstance()
    .getExternalContext().getSessionMap().get("currentCustomer");

然后,如果我将这个新的客户对象以与以前相同的名称放入会话中,它会被旧的替换吗?我的意思是,如果我在更新该对象后编写以下代码,会话变量是否更新:

FacesContext.getCurrentInstance().getExternalContext()
    .getSessionMap().put("currentCustomer", currentCustomer);

我的意思是,我将一个名为“currentCustomer”的变量放入会话中,我对其进行了更新并再次放入具有相同名称“currentCustomer”的会话中。在这种情况下会发生什么?它会自动替换为旧的吗?因为我认为我们不能将两个不同的对象放入具有相同名称的会话中,对吧?

4

2 回答 2

0

关于你的问题,是的。该值将被新值替换,因为它是 a java.util.Map,它存储值并将它们与键相关联。

只要您的 key 是"currentCustomer",任何对象都可以与此关联。

于 2013-07-04T21:07:28.797 回答
0

您不需要执行第三步,因为 currentCustomer 是同一个对象实例。也就是说,在第二步之后,地图仍然有 currentCustomer 实例,您只需使用 get(key) 将其退出,如果您获取该实例并更改其中的一些值,则地图将具有所有更改,因为还是同一个例子。

如果您以某种方式需要使用 currentCustomer 的另一个实例,那么是的,您需要执行 put("currentCustomer", currentCustomer); 再次到你的地图。

于 2013-07-04T21:04:16.220 回答