code: @Override
      public String getActionURL(FacesContext facesContext, String viewId) {
          if (contextId == null) {
              if (facesContext.getAttributes().containsKey(Container.CONTEXT_ID_KEY)) {
                  contextId = (String) facesContext.getAttributes().get(Container.CONTEXT_ID_KEY);
              } else {
                  contextId = RegistrySingletonProvider.STATIC_INSTANCE;
              }
          }
          String actionUrl = super.getActionURL(facesContext, viewId);
          final ConversationContext ctx = getConversationContext(contextId);
          if (ctx!= null && ctx.isActive() && !getSource().equals(Source.BOOKMARKABLE) && !ctx.getCurrentConversation().isTransient()) {
              return new FacesUrlTransformer(actionUrl, facesContext)
                  .appendConversationIdIfNecessary(getConversationContext(contextId).getParameterName(), ctx.getCurrentConversation().getId())
                  .getUrl();
          } else {
              return actionUrl;
          }
      }
docs: Allow the delegate to produce the action URL. If the conversation is
  long-running, append the conversation id request parameter to the query
  string part of the URL, but only if the request parameter is not already
  present.
  <p/>
  This covers form actions Ajax calls, and redirect URLs (which we want) and
  link hrefs (which we don't)
  
  @see {@link ViewHandler#getActionURL(FacesContext, String)}