code: private Map<String, Object> _getActiveFlashMap()
      {
          FacesContext facesContext = FacesContext.getCurrentInstance();
          if (PhaseId.RENDER_RESPONSE.equals(facesContext.getCurrentPhaseId()) 
                  || !facesContext.isPostback())
          {
              return _getRenderFlashMap(facesContext);
          }
          else
          {
              return _getExecuteFlashMap(facesContext);
          }
      }
docs: Get the proper map according to the current phase:
  
  Normal case:
  
  - First request, restore view phase (create a new one): render map n
  - First request, execute phase: Skipped
  - First request, render  phase: render map n
  
  Render map n saved and put as execute map n
  
  - Second request, execute phase: execute map n
  - Second request, render  phase: render map n+1
  
  Post Redirect Get case: Redirect is triggered by a call to setRedirect(true) from NavigationHandler
  or earlier using c:set tag.
  
  - First request, restore view phase (create a new one): render map n
  - First request, execute phase: Skipped
  - First request, render  phase: render map n
  
  Render map n saved and put as execute map n
  
  POST
  
  - Second request, execute phase: execute map n
  Note that render map n+1 is also created here to perform keep().
  
  REDIRECT
  
  - NavigationHandler do the redirect, requestMap data lost, called Flash.setRedirect(true)
  
  Render map n+1 saved and put as render map n+1 on GET request.
  
  GET
  
  - Third  request, restore view phase (create a new one): render map n+1 (restorred)
  (isRedirect() should return true as javadoc says)
  - Third  request, execute phase: skipped
  - Third  request, render  phase: render map n+1
  
  In this way proper behavior is preserved even in the case of redirect, since the GET part is handled as
  the "render" part of the current traversal, keeping the semantic of flash object.
  
  @return