Are you passing an object into the component? Objects are passed by reference, so if your component has an attribute that takes an object and does something to it, your outer page controller will be able to access the changed values.
If you were to pass in a shell object, ie. if your UI is allowing a user to select an Account.
Class SelectedAccount
{
public Account theAccount {get;set;}
}
Component:
<apex:component controller="ComponentController">
<apex:attribute type="SelectedAccount" name="userSelectedAccount" description="Selected Account" assignTo="{!selectedAccount}"
</apex:component>
Component Controller:
public class ComponentController
{
public selectedAccount;
public void ComponentController(){}
public PageReference selectAccountFromUI(Account selected)
{
selectedAccount.theAccount = selected;
return null;
}
}
Page Using the Component:
<c:MyAccountComponent userSelectedAccount="{!instanceOfSelectedAccount}"/>
This would allow you to assign the user selected account into the instance of wrapper object which is owned by the outer controller. You can then reference:
instanceOfSelectedAccount.theAccount
from your main Visualforce Pages controller.