gpt4 book ai didi

java - 如何从 session 中清除所有 pageFlowScope map ?

转载 作者:太空宇宙 更新时间:2023-11-04 08:27:25 25 4
gpt4 key购买 nike

当我们确定不再需要它时,如何从 session 中清除 pageFlowScopes 和 View 缓存?

以下操作清除当前请求上下文中的 pageFlowScope 映射

    RequestContext requestContext = RequestContext.getCurrentInstance();
requestContext.getPageFlowScope().clear();

但是,如果我转储 http-session 属性,我仍然会在 session 中看到许多 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

显然,如果我清除 session 属性,它就会消失,但我不想这样做,还有其他方法吗?

使用

  • trinidad-api-1.0.10.jar
  • myfaces-impl-1.1.5.jar

编辑

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

org.apache.myfaces.trinidadinternal.Change

最佳答案

PageFlowScope

如果不打算使用多个 pageflowscope,则可以更改 trinidad-config.xml 中的以下条目

<page-flow-scope-lifetime>1</page-flow-scope-lifetime>

这将控制 session 中保存的org.apache.myfaces.trinidadinternal.application.PageFlowScope的数量。

<小时/>

VIEW_CACHE

如果不打算使用 VIEW_CACHE,可以将 web.xml 中的以下 init params 配置为最小值。

<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>

这将控制 session 中保存的 org.apache.myfaces.trinidadinternal.application.VIEW_CACHE 数量

<小时/>

trinidadinternal.Change

我找不到避免这种情况的方法。

<小时/>

最终使用以下方法进行清理

@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);
}
}
}

关于java - 如何从 session 中清除所有 pageFlowScope map ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8230660/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com