Передача данных между ManagedBeans

У меня есть один класс под названием Foo. И один ManagedBean называется FooBean. На странице (Facelet) я получаю новую информацию Foo от пользователя и вставляю ее в БД. После первой отправки данных кнопка печати будет активирована. Теперь мне нужно, чтобы пользователь нажал кнопку печати и увидел другую страницу (Facelet), которая является страницей печати с помощью PrintFooBean. Как я могу передать идентификатор недавно вставленного Foo в PrintFooBean, загрузить его и отобразить его элементы на странице печати?

Каков наилучший способ? И я предпочитаю, чтобы пользователь видел страницу печати в новом окне/вкладке браузера.


person ehsun7b    schedule 03.02.2011    source источник
comment
balusc.blogspot.com/2006/06/связь-в-jsf. html   -  person jmj    schedule 03.02.2011
comment
@org: эта статья по-прежнему предназначена для JSF 1.2. В JSF 2.0 есть много лучших/приятных способов.   -  person BalusC    schedule 03.02.2011


Ответы (1)


Передайте его как параметр запроса.

<a href="print.jsf?id=#{foo.id}" target="_blank">print</a>

или ненавязчиво прогрессивно улучшаться с помощью JS window.open

<a href="print.jsf?id=#{foo.id}" target="_blank"
    onclick="window.open('print.jsf?id=#{foo.id}'); return false;">print</a>

Заполните bean-компонент печати файлом id.

@ManagedProperty(value="#{param.id}")
private Long id;

Предварительно загрузите данные Foo в тот же компонент на основе id.

@PostConstruct
public void init() {
    this.foo = fooDAO.find(id);
}
person BalusC    schedule 03.02.2011
comment
Это то, что я сделал до сих пор, но есть ли стандартное решение JSF вместо target=_blank или JS? - person ehsun7b; 03.02.2011
comment
Не в стандартной реализации JSF. Для сладости вам нужно обратиться к сторонней библиотеке JSF-компонентов с богатым пользовательским интерфейсом. Например, PrimeFaces с <p:dialog> для этой цели или даже <p:dataTable> с мгновенным выбором строки. - person BalusC; 03.02.2011