2010-02-15 2 views
1

У меня есть тег mediaOutput, который в своем атрибуте createContent требует, чтобы бэк-компонент находился в определенном состоянии. Список значений, который заполняется методом init, должен быть доступен.richfaces keepAlive не работает

Поэтому я добавил тег keepAlive для всего бэкэнда. Теперь я действительно вижу backingBean вместо некоторого (richfaces) прокси-компонента, но заполненный список снова является нулевым.

Как это сделать?

Я проверил, что был вызван метод init, и список заполняется в методе init.

<a4j:keepAlive beanName="myBean" /> 
<a4j:mediaOutput createContent="#{myBean.writeChart}" ... /> 

Подложка боб

public class MyBean implements Serializable { 

public List list; 

public void init(ActionEvent event) { 
    // call some resource to fill the list 
    list = service.getItems(); 
} 

public void writeChart(final OutputStream out, final Object data) throws IOException { 
    // list is null 
} 

// getters & setters 
} 

ответ

2

Объявить свой боб, чтобы быть в session области.

Если у вас есть другая информация о запросах только в bean-компоненте, тогда просто создайте новый компонент с запросом и переместите туда все остальное. Это совершенно разборчиво.

+0

То есть, хотя это работает, именно то, что я пытался предотвратить ... Бэк-бэк содержит другие материалы для одной и той же страницы, поэтому все его содержимое в области сеанса не рекомендуется , Создание отдельного компонента для него neihter. Вот почему keepAlive был введен .. –

+0

да, но, возможно, mediaOutput не проходит через обычные механизмы ajax-request, так что это ваш единственный способ. Возможно, вам нравится использовать какой-то объем разговора (оркестр, шов). см. мое обновление для другого bean – Bozho

+0

Возможно, да! Но они могли бы документировать это + тег mediaOutput является частью спецификации a4j, странно, что он не поддерживает другие функции a4j :( –

0

Это не проблема. Вам не нужно держать Медиабею живым, а вы не можете. Компонент, указанный в параметре createContent, будет создан компонентом MediaOutput. Префикс «bean» является тревожным - это всего лишь простой класс java, который содержит метод paint (...). Вы должны получить keepalived bean (например, бэк-компонент) в этом простом «bean» как ManagedProperty, и он также может содержать сохраненную информацию.

Пример:

abc.xhtml и ABC.java с @ManagedBean (имя = "ABCBean") и @RequestScoped аннотации. Вы используете ABCBean как поддерживающий компонент с abc.xhtml, но НЕ в параметре mediaOutput.createContent! Но вы можете создать MediaBean.java с аннотацией @ManagedBean (name = "MediaBean"), и у нее есть @ManagedProperty, который получает экземпляр ABCBean в MediaBean. И экземпляр ABCBean сохраняется ...

Смежные вопросы