У нас есть три компонента на визуал форсепейдж,нужно получить все данные в контроллер страницы из компонентов.Этот вопрос был с одного собеседования, тогда я сразу предложил написать серелизатор на javascript и передать в контроллер,на что мне сказали что да это можно сделать да, А какие вы знаете Salesforce style решения для этой задачи ? Какие есть еще варианты ?
у ВФ компонента может быть собственный контроллер. МОжет ли это как то помочь?
А что если контроллер для компонента и оснонвой страницы - один и тот же, просто компонент использует один из его дополнительных возможностей контроллер. МОжно ли так сделать?
А что если тот код в контроллере, который работает с компонентом, вывести в его расширение? 
я практически не работал с компонентами, поэтому это все догадки.
А глянь вот этот документ
https://developer.salesforce.com/page/Controller_Component_Communication
Только что нашел, не было времени вчитываться, но первый абзац уже цепляет.
The first step is to create a virtual class that every controller that needs to communicate with a component controller will extend.
В принципе этот подход - усложненный вариант решения который предложил Den Brown с общим контроллером
Немного не в тему...но связанное с компонентами (скорее даже элементами VF-странички)
https://developer.salesforce.com/page/Dynamic_Visualforce_Components
это не ссылки, а настоящие разминки для мозгов.
Код в Controller Component Communication - это просто квинсистенция ООП, просто нужно читать и запоминать навсегда.
обратите внимание, что в разметке в переменную компонента передается что-то, но это:
- не переменная в разметке, а поле в контроллере компонента.
- и не просто поле, а свойство с сетом - и этот сет делает что-то еще кроме как прописывает поле.
вот это способ того как из контроллера можно заставить контроллер компонента что-то выполнить еще до того, как этот компоненет контроллер будет взят в своейство контроллера страницы.
в данном случае делается следующее: контроллер страницы заставляет контроллер компонента заставить этот контроллера страницы взять этот самый контроллер компонета себе в поле. 
просто прекрасно
А теперь....внимание.....сможете ли вы найти баг в этой логике ?
Баг (неточность, недопонимание) в логике того, как я представляю себе работу кода, или баг в самом коде примеров?
Работу самого кода я не проверял, а ошибок в логике я пока не нашел .
сначала не было понятно, зачем нужен getThis() - потом понял - чтобы получить this на фронте, иначе никак к нему не обратится в разметке (так получается?).
не совсем понятно зачем в вирт комп контрол есть проверка на нул пришедшего аргумента\переменной - ведь он обязателен, без него не возможно заставить компонент работать. или можно в аргумент компонента передать 'null'? и тогда компонент будет работать сам по себе без связки с основным контроллером страницы. или этот аоргумент станет Нул если в него передать контр страницы, который не PageControllerBase, и тогда компонент будет работать без связки? а можно ли передать в аргумент переменную другого типа? эта деталь не понятна
А теперь посмотри сколько раз реально вызывается каждый компонент в дебаг логе.
сегодня нет времени это пробовать - замучен с СФ1. буду подробно изучать на выходных.
я думаю там один контроллер страницы и один комп контроллер, которые используют this (передать себя, взять меня). в моем описании возможно выглядит что там 2 вызова контроллера страницы и 2 вызова контроллера компонента - но я думаю, что это не так. Там все те же лица, только в профиль.
Немного не в тему...но связанное с компонентами (скорее даже элементами VF-странички)https://developer.salesforce.com/page/Dynamic_Visualforce_Components
вот это тоже очень интересная статья. 
вот теперь хоть понятно, что такое Динамические ВФ компоненты (ДВФК).
я думал, это что-то вроде кастомных компонентов, к которым можно обращаться из кода контроллера, манипулировать ими.
но ДВФК - это динамические создаваемые в контроллере фрагменты разметки. 
при этом в примере приведено как можно создавать в контроллере фрагменты с апекс:тегами, что само по себе интересно, хотя в такой ДВФК можно поместить и HTML и JS. 
интересная тема.
но не уловил, в чем разница в конечном результате здесь:
Component.Apex.OutputField outTxt = new Component.Apex.OutputField();
outTxt.value = rec.Name;
Component.Apex.InputField inTxt = new Component.Apex.InputField(value=rec.name);
inTxt.expressions.value = ‘{!rec.name}’;
Просто отличные статьи, можно отдельную тему создать "Статьи которые стоит прочитать" и прикрепить вверху.
Итак вести с полей (дебажим пример Illustrating How to Establish Communication Between Page and Component)
Запуск страницы:
DEBUG|You are in getThis of PageControllerBase
DEBUG|You are in setComponentController of MyPageController // здесь и следующий: очередность не та, что ожидал
DEBUG|You are in pageController SET after value != null of ComponentControllerBase
DEBUG|You are in setComponentController of MyPageController // еще раз??
DEBUG|You are in pageController SET after value != null of ComponentControllerBase
DEBUG|You are in getIntValue of MyComponentController
Жмем на кнопку "Call Component Controller Method":
DEBUG|You are in getThis of PageControllerBase
DEBUG|You are in setComponentController of MyPageController
DEBUG|You are in pageController SET after value != null of ComponentControllerBase
DEBUG|You are in setComponentController of MyPageController
DEBUG|You are in pageController SET after value != null of ComponentControllerBase
DEBUG|You are in incrementValue of MyComponentController // здесь и следующий: очередность не та, что ожидал - ведь вроде жмем на callComponentControllerMethod
DEBUG|You are in callComponentControllerMethod of MyPageController
DEBUG|You are in getThis of PageControllerBase // как сюда снова попали??
DEBUG|You are in setComponentController of MyPageController
DEBUG|You are in pageController SET after value != null of ComponentControllerBase
DEBUG|You are in getIntValue of MyComponentController
Этот мир сложнее, чем я ожидал...
Cпасибо за обсуждение. :)
Сегодня ночью думал об этом примере с контроллерами страницы и компонента.
И понял что это пример реализации ООП патерна Стратегия.
в нем изменемые функциональные части выносятся из базового класса в собственный класс (или в интерфейс) с наследниками, которые и реализует разные варианты этого функциоанла , а в базовом классе указывается объектное поле типа родительского класса для всех этих "функциональных классов", и в это поле по мере необходимости можно засаживать любого наследника из семейки этих "функциональных" классов и использовать его функционал.
В данном случае базовый класс - это контроллер страницы. А вспомогательный, фукциональный класс - это семейство конроллеров компонентов.
Но с очередностью, как происходит инициализация этого "компонентного" поля в контроллере страницы так и разобрал до конца. вероятно нужно понимае как на сервере выполняется код разметки и код контроллера.