This is how I'm rendering my composite component inside a loop, it works, but when I switch to edit mode and sumbmit new values I can't retrieve them from the InputText.
@FacesComponent("customComponent")
public class CustomComponent extends UIInput implements NamingContainer, Serializable {
    private static final long serialVersionUID = 1L;
    @Override
    public String getFamily() {
        return UINamingContainer.COMPONENT_FAMILY;
    }
    private UIComponent component;
    private HtmlInputText inputTextValue;
    @Override
    public void encodeBegin(FacesContext context) throws IOException {
        AttributeObject attrObject = (AttributeObject) getAttributes().get("value");
        Boolean enableInput = (Boolean) getAttributes().get("enableInput");
        if (attrObject.getAttributeValue() != null) {
            if (attrObject.getAttributeDescriptor().getDataType() == DataTypeConstants.TEXT && enableInput) {
                InputText inputText = new InputText();
                inputText.setRequired(true);
                inputText.setValueExpression("binding",
                        createValueExpression("#{searchController.myComponent}", UIComponent.class));
                inputText.setId("editableTextId");
                inputText.encodeAll(context);
                inputText.setParent(this);
                component = inputText;
            } else if (attrObject.getAttributeDescriptor().getDataType() == DataTypeConstants.TEXT
                    && enableInput == false) {
                OutputLabel outputLabel = new OutputLabel();
                outputLabel.setValue(attrObject.getAttributeValue());
                outputLabel.encodeAll(context);
                outputLabel.setId("nonEditatbleId");
                component = outputLabel;
            }
        }
    }
    private ValueExpression createValueExpression(String valueExpression, Class<?> valueType) {
        FacesContext facesContext = FacesContext.getCurrentInstance();
        return facesContext.getApplication().getExpressionFactory()
                .createValueExpression(facesContext.getELContext(), valueExpression, valueType);
    }

 
    