Как очистить все карты pageFlowScope от сессии? - PullRequest
1 голос
/ 22 ноября 2011

Как очистить pageFlowScopes и просмотреть кэши из сеанса, когда мы уверены, что он больше не требуется?

После очистки 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

Очевидно, что если я очищу атрибуты сеанса, все это исчезнет, ​​ноЯ не хочу этого делать, есть ли другой способ?

Использование

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

EDIT

Также наблюдается следующий атрибут, сохраняемый в сеансе навсегда, и содержимое увеличивается со временем

org.apache.myfaces.trinidadinternal.Change

1 Ответ

1 голос
/ 30 ноября 2011

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, сохраненным в сеансе


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