code: public String encodeBookmarkableURL(String baseUrl,
                                          Map<String, List<String>> parameters) {
  
          if (defaultExternalContext != null) {
              return defaultExternalContext.encodeBookmarkableURL(baseUrl,
                                                                  parameters);
          }
          throw new UnsupportedOperationException();
  
      }
docs: <p class="changed_added_2_0">
  <span class="changed_modified_2_2">The</span> purpose of this method is
  to generate a query string from the collection of Parameter
  objects provided by the parameters argument and append that query string to the baseUrl.
  This method must be able to encode the parameters to a baseUrl that may or may not have
  existing query parameters. The parameter values should be encoded appropriately for the
  environment so that the resulting URL can be used as the target of a link (e.g., in an
  href attribute) in a JSF response.  It's possible for an ExternalContext implementation to
  override this method in any way that would make the URL bookmarkable in that environment.
  </p>
  
  <p class="changed_added_2_2">See {@link #encodeActionURL(java.lang.String)}
  for the required specification of how to encode the {@link javax.faces.lifecycle.ClientWindow}.
  </p>
  
  <p>
  The default implementation throws
  <code>UnsupportedOperationException</code> and is provided for
  the sole purpose of not breaking existing applications that
  extend this class.
  </p>
  
  @param baseUrl    The base URL onto which the query string generated by this method will be appended. The URL may contain query parameters.
  @param parameters The collection of Parameter objects, representing name=value pairs that are used to produce a query string
  @since 2.0