我正在使用以下方法在jsf 1.2应用程序中保存和检索ViewRoot中的数据:
private static final String DATA_KEY="dataKey";
public static Object retrieveData(String key)
{
FacesContext context = FacesContext.getCurrentInstance();
if(context == null)
return null;
UIViewRoot view = context.getViewRoot();
if(view == null)
return null;
Map map = (Map)view.getAttributes().get(DATA_KEY);
if(map != null)
return map.get(key);
else
return null;
}
public static void saveData(String key, Object data)
{
Map map = (Map)FacesContext.getCurrentInstance().getViewRoot().getAttributes().get(DATA_KEY);
if(map == null)
{
map = new HashMap();
FacesContext.getCurrentInstance().getViewRoot().getAttributes().put(DATA_KEY, map);
}
map.put(key, data);
}
我在我的很多bean中大量使用这些函数,以便能够在我的请求bean的init和post中使用相同的数据,所以我想知道ViewRoot中存储的值何时从内存中释放,是否在发布时释放用户会话结束,或请求结束时。
并且大量使用它会导致内存泄漏吗? 我应该更改每个bean的数据键还是使用相同的数据键? 请指教,谢谢。