code: @Override
      public void doPostPhaseActions(FacesContext facesContext)
      {
          if (!_flashScopeDisabled)
          {
              // do the actions only if this is the last time
              // doPostPhaseActions() is called on this request
              if (_isLastPhaseInRequest(facesContext))
              {
                  if (_isRedirectTrueOnThisRequest(facesContext))
                  {
                      // copy entries from executeMap to renderMap, if they do not exist
                      Map<String, Object> renderMap = _getRenderFlashMap(facesContext);
  
                      for (Map.Entry<String, Object> entry 
                          : _getExecuteFlashMap(facesContext).entrySet())
                      {
                          if (!renderMap.containsKey(entry.getKey()))
                          {
                              renderMap.put(entry.getKey(), entry.getValue());
                          }
                      }
                  }
              
                  // remove execute Map entries from session (--> "destroy" executeMap)
                  _clearExecuteFlashMap(facesContext);
              
                  // save the current FacesMessages in the renderMap, if wanted
                  // Note that this also works on a redirect even though the redirect
                  // was already performed and the response has already been committed,
                  // because the renderMap is stored in the session.
                  _saveMessages(facesContext);
                  
                  _clearRenderFlashTokenIfMapEmpty(facesContext);
              }
          }
      }
docs: Used to destroy the executeMap and to save all FacesMessages for the
  next request, but only if this is the last invocation of this method
  in the current lifecycle (if redirect phase 5, otherwise phase 6).