code: protected Object getConvertedValue(FacesContext context, Object submittedValue) throws ConverterException
      {
          Renderer renderer = getRenderer(context);
          if (renderer != null)
          {
              return renderer.getConvertedValue(context, this, submittedValue);
          }
          else if (submittedValue instanceof String)
          {
              Converter converter = _SharedRendererUtils.findUIOutputConverter(context, this);
              if (converter != null)
              {
                  return converter.getAsObject(context, this, (String) submittedValue);
              }
          }
          return submittedValue;
      }
docs: Convert the provided object to the desired value.
  <p>
  If there is a renderer for this component, then call the renderer's getConvertedValue method. While this can of
  course be implemented in any way the renderer desires, it typically performs exactly the same processing that
  this method would have done anyway (ie that described below for the no-renderer case).
  <p>
  Otherwise:
  <ul>
  <li>If the submittedValue is not a String then just return the submittedValue unconverted.
  <li>If there is no "value" value-binding then just return the submittedValue unconverted.
  <li>Use introspection to determine the type of the target property specified by the value-binding, and then use
  Application.createConverter to find a converter that can map from String to the required type. Apply the
  converter to the submittedValue and return the result.
  </ul>