public synchronized String getToken(FacesContext context) { if (_token != null) return _token; // Don't need a token when nothing's in the map, and we // don't have a parent if (isEmpty() && (_sharedData._children == null) && (_sharedData._parent == null)) return null; String parentToken; TokenCache cache; if (_sharedData._parent != null) { parentToken = _sharedData._parent.getToken(context); cache = _sharedData._parent._getTokenCache(); } else { parentToken = null; cache = _getRootTokenCache(context, _sharedData._lifetime); } Map<String, Object> store = _createMapToStore(context, parentToken); String token = cache.addNewEntry(this, store); if (parentToken != null) token = parentToken + TokenCache.SEPARATOR_CHAR + token; _token = token; // With a new token, there cannot be any shared children // with a prior request. if (_sharedData._children != null) { // =-=AEW NEED TO CLONE SHARED DATA _LOG.fine("Discarding child PageFlowScopes; new token is {0}", token); _sharedData._children = null; } return _token; }
private static TokenCache _getRootTokenCache(FacesContext context, int lifetime) { return TokenCache.getTokenCacheFromSession( context.getExternalContext(), _PAGE_FLOW_SCOPE_CACHE, true, lifetime); }