当我们确定不再需要会话时,如何清除pageFlowScope并查看会话中的缓存?
以下在当前请求上下文中清除pageFlowScope
地图
RequestContext requestContext = RequestContext.getCurrentInstance();
requestContext.getPageFlowScope().clear();
但如果我转储http-session attributes
,我仍会在会话中看到PageFlowscopes
的许多实例
org.apache.myfaces.trinidadinternal.application.PageFlowScope.ois6p8lk1
org.apache.myfaces.trinidadinternal.application.PageFlowScope.ois6p8lk2
org.apache.myfaces.trinidadinternal.application.PageFlowScope.ois6p8lk3
并查看缓存
org.apache.myfaces.trinidadinternal.application.VIEW_CACHE.1qvzgdgkw
org.apache.myfaces.trinidadinternal.application.VIEW_CACHE.2qvzgdgkw
org.apache.myfaces.trinidadinternal.application.VIEW_CACHE.3qvzgdgkw
显然,如果我清除会话属性,它会全部消失,但我不想这样做,还有其他办法吗?
使用
修改
同时观察到以下属性永远保留在会话中,并且内容随着时间的推移而增长
org.apache.myfaces.trinidadinternal.Change
答案 0 :(得分:1)
<强> PageFlowScope 强>
如果在trinidad-config.xml
中输入后不打算使用多个页面流量示例,则可以更改
<page-flow-scope-lifetime>1</page-flow-scope-lifetime>
这将控制会话中保留的org.apache.myfaces.trinidadinternal.application.PageFlowScope
的数量。
<强> VIEW_CACHE 强>
如果不计划在VIEW_CACHE
init params
之后使用web.xml
,则可以将<context-param>
<param-name>org.apache.myfaces.trinidad.CLIENT_STATE_MAX_TOKENS</param-name>
<param-value>1</param-value>
</context-param>
<context-param>
<param-name>
org.apache.myfaces.NUMBER_OF_VIEWS_IN_SESSION
</param-name>
<param-value>1</param-value>
</context-param>
配置为最小值。
org.apache.myfaces.trinidadinternal.application.VIEW_CACHE
这将控制会话中保留的@SuppressWarnings("unchecked")
public static Map<String, Object> getSessionMap() {
FacesContext context = FacesContext.getCurrentInstance();
return context.getExternalContext().getSessionMap();
}
private void clearMyfacesSessionAttributes() {
RequestContext requestContext = RequestContext.getCurrentInstance();
requestContext.getPageFlowScope().clear();
Map<String, Object> sessionMap = getSessionMap();
Set<Map.Entry<String, Object>> entrySet = sessionMap.entrySet();
for (Map.Entry<String, Object> entry : entrySet) {
String key = entry.getKey();
if(key.contains("org.apache.myfaces.trinidadinternal.application.VIEW_CACHE")
|| key.contains("org.apache.myfaces.trinidadinternal.application.PageFlowScope")
|| key.contains("org.apache.myfaces.trinidadinternal.Change"))
{
sessionMap.remove(key);
}
}
}
的数量
<强> trinidadinternal.Change 强>
我找不到办法避免这种情况。
使用以下方法结束清理
{{1}}