code: private void setComponentProperty(_PropertyDescriptorHolder propertyDescriptor, Object value)
      {
          Method writeMethod = propertyDescriptor.getWriteMethod();
          if (writeMethod == null)
          {
              throw new IllegalArgumentException("Component property " + propertyDescriptor.getName()
                                                 + " is not writable");
          }
          try
          {
              writeMethod.invoke(_component, new Object[]{value});
          }
          catch (Exception e)
          {
              FacesContext facesContext = _component.getFacesContext();
              throw new FacesException("Could not set property " + propertyDescriptor.getName() +
                      " of component " + _component.getClientId(facesContext) + " to value : " + value + " with type : " +
                      (value == null ? "null" : value.getClass().getName()), e);
          }
      }
docs: Execute the setter method of the specified property on the underlying
  component.
  
  @param propertyDescriptor specifies which property to write.
  @throws IllegalArgumentException if the property is not writable.
  @throws FacesException           if any other problem occurs while invoking
  the getter method.