如何清除会话中的所有pageFlowScope映射?

时间:2011-11-22 17:00:13

标签: java jsf session-variables myfaces trinidad

当我们确定不再需要会话时,如何清除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

显然,如果我清除会话属性,它会全部消失,但我不想这样做,还有其他办法吗?

使用

  • 特立尼达-API-1.0.10.jar
  • MyFaces的-IMPL-1.1.5.jar

修改

同时观察到以下属性永远保留在会话中,并且内容随着时间的推移而增长

org.apache.myfaces.trinidadinternal.Change

1 个答案:

答案 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}}