code: static Converter getValueTypeConverter(FacesContext facesContext, UISelectMany component)
      {
          Converter converter = null;
          
          Object valueTypeAttr = component.getAttributes().get(VALUE_TYPE_KEY);
          if (valueTypeAttr != null)
          {
              // treat the valueType attribute exactly like the collectionType attribute
              Class<?> valueType = getClassFromAttribute(facesContext, valueTypeAttr);
              if (valueType == null)
              {
                  throw new FacesException(
                          "The attribute "
                                  + VALUE_TYPE_KEY
                                  + " of component "
                                  + component.getClientId(facesContext)
                                  + " does not evaluate to a "
                                  + "String, a Class object or a ValueExpression pointing "
                                  + "to a String or a Class object.");
              }
              // now we have a valid valueType
              // --> try to get a registered-by-class converter
              converter = facesContext.getApplication().createConverter(valueType);
              
              if (converter == null)
              {
                  facesContext.getExternalContext().log("Found attribute valueType on component " +
                          _ComponentUtils.getPathToComponent(component) +
                          ", but could not get a by-type converter for type " + 
                          valueType.getName());
              }
          }
          
          return converter;
      }
docs: Uses the valueType attribute of the given UISelectMany component to
  get a by-type converter.
  
  @param facesContext
  @param component
  @return