Регистрация  |  Вход

SerializationException при использовании DynamicComponent

Здраствуйте,
Пробовал создать динамическую компоненту:
Если написать в контролере:

public   Component.Apex.PageBlock pgBlock {get; private set;}

то получаю ошибку System.SerializationException: Not Serializable: Component.apex.pageblock
а если написать
public transient  Component.Apex.PageBlock pgBlock {get; private set;}
то после ререндера страници компонента исчезает.

Но если сделать метод

public Component.Apex.PageBlock getPgBlock ()
и в нем создавать постоянно компоненту, то так работает, но ето не совсем эффективно(когда например 10-20 таких компонент), если я не ошибаюсь.
Как можно решить ету проблему?
И можно как-то создать список компонент, а потом repeat'ом виводить?

Здраствуйте, 
Пробовал создать динамическую компоненту:
Если написать в контролере: [code] public   Component.Apex.PageBlock pgBlock {get; private set;} [/code]
то получаю ошибку System.SerializationException: Not Serializable: Component.apex.pageblock 
а если написать [code] public transient  Component.Apex.PageBlock pgBlock {get; private set;}[/code] то после ререндера страници компонента исчезает.

Но если сделать метод [code]public Component.Apex.PageBlock getPgBlock () [/code]и в нем создавать постоянно компоненту, то так работает, но ето не совсем эффективно(когда например 10-20 таких компонент), если я не ошибаюсь.
Как можно решить ету проблему?
И можно как-то создать список компонент, а потом repeat'ом виводить?

Частично прокомментирую твой вопрос по поводу transient.
Данный модификатор говорит о том что данная переменная не передается во view state, а значит что ее значение будет теряться при обращениях к методам контроллера.
Поэтому не удивительно что "после ререндера страници компонента исчезает". Transient переменную придется инициализировать каждый раз при обращении к контроллеру.

Частично прокомментирую твой вопрос по поводу 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, в которой есть два метода:


  • getExpression
  • () - Returns the expression that is evaluated when the action is invoked.[/*:m]
  • invoke
  • () - Invokes the action.[/*:m]

Но при такой реализации:

private PageReference method() {...}

public void init() {
ApexPages.Action inv = new ApexPages.Action('{!method}');
inv.Invoke();
}


Получаю ошибку:
System.UnexpectedException: Salesforce System Error: 173249565-39619 (1027755256) (1027755256)

Наверное глупейший вопрос, а можно в Апексе как-то динамически вызвать метод <!-- s:?: --><img src="{SMILIES_PATH}/icon_question.gif" alt=":?:" title="Вопрос" /><!-- s:?: --> 
И вот еще такая проблема, можно ли как-то создать список компонент, и выводить их repeat'ом? (пока что идея создать компоненту и прикрепить все нужные компоненты к ней )

Просто у меня есть примерно 30 динамических компонент, но на странице нужно отображать только несколько, в зависимости от условии. Но при каждом  обращении к контролеру вызывать сети для каждой компоненты будет не очень эффективно,  но писать 30 if'оф на подобии if (isVisibleComponent) setComponent(); будет не очень красиво.

UPD: По поводу динамического вызова метода, нашел вот сайт [url]https://www.salesforce.com/us/developer/docs/apexcode/Content/apex_pages_action.htm[/url].

Как я понял есть такая штука ApexPages.Action, в которой есть два метода:
[list]
[*] getExpression()  - Returns the expression that is evaluated when the action is invoked.[/*:m]
[*] invoke() - Invokes the action.[/*:m][/list:u]

Но при такой реализации:
[code]
private PageReference method() {...}

public void init() {
        ApexPages.Action inv = new ApexPages.Action('{!method}');
        inv.Invoke();
}
[/code]
Получаю ошибку: 
System.UnexpectedException: Salesforce System Error: 173249565-39619 (1027755256) (1027755256)