Здраствуйте,
Пробовал создать динамическую компоненту:
Если написать в контролере:
public Component.Apex.PageBlock pgBlock {get; private set;}public transient Component.Apex.PageBlock pgBlock {get; private set;} то после ререндера страници компонента исчезает.Но если сделать метод
public Component.Apex.PageBlock getPgBlock ()и в нем создавать постоянно компоненту, то так работает, но ето не совсем эффективно(когда например 10-20 таких компонент), если я не ошибаюсь.
Частично прокомментирую твой вопрос по поводу transient.
Данный модификатор говорит о том что данная переменная не передается во view state, а значит что ее значение будет теряться при обращениях к методам контроллера.
Поэтому не удивительно что "после ререндера страници компонента исчезает". Transient переменную придется инициализировать каждый раз при обращении к контроллеру.
Наверное глупейший вопрос, а можно в Апексе как-то динамически вызвать метод <!-- s:?: --><img src="{SMILIES_PATH}/icon_question.gif" alt=":?:" title="Вопрос" /><!-- s:?: -->
И вот еще такая проблема, можно ли как-то создать список компонент, и выводить их repeat'ом? (пока что идея создать компоненту и прикрепить все нужные компоненты к ней )
Просто у меня есть примерно 30 динамических компонент, но на странице нужно отображать только несколько, в зависимости от условии. Но при каждом обращении к контролеру вызывать сети для каждой компоненты будет не очень эффективно, но писать 30 if'оф на подобии if (isVisibleComponent) setComponent(); будет не очень красиво.
UPD: По поводу динамического вызова метода, нашел вот сайт https://www.salesforce.com/us/developer/docs/apexcode/Content/apex_pages_action.htm.
Как я понял есть такая штука ApexPages.Action, в которой есть два метода:
Но при такой реализации:
private PageReference method() {...}public void init() {
ApexPages.Action inv = new ApexPages.Action('{!method}');
inv.Invoke();
}