Как восстановить управляемый Bean из другого управляемого Bean

У меня есть две страницы (скажем, page1 и page2) и один magaedBean для каждой страницы (mb1 и mb2). в mb1 у меня есть экземпляр mb2 со всеми их атрибутами, предварительно установленными методом в mb1. Что-то вроде этого:

public Mb1(){}//Default constructor
private Mb2 mb2;//Instance of Mb2 inside Mb1

я хочу, чтобы из метода в mb1 открыть представление page2 таким образом, чтобы контроллер page2(mb2) был экземпляром, хранящимся в mb1.

Оба моих управляемых компонента ДОЛЖНЫ быть ViewScoped, я знаю, что могу сделать это, используя область видимости сеанса, но это не то, что мне нужно. Есть ли способ сделать это?

1 ответ

Почему управляемый бин отвечает за инициализацию другого? Я бы предпочел предоставить необходимую информацию Mb2 чтобы он мог инициализировать себя.

Если вы настроены на передачу объекта и избегать Mb2Самоинициализации (и если вы используете JSF 2), я предлагаю вам взглянуть на JSF Flash Scope.

Tough Flash сам по себе не является областью видимости, он основан на функциях (AFAIK) на основе реализации Ruby шаблона POST - REDIRECT - GET. Вместо использования компонента в качестве параметра, вы можете создать свой собственный объект, который хранит данные и Mb2 оперируйте этим.

Когда вам нужно перейти к page2Просто сохраните этот элемент во флэш-памяти и получите его позже, когда будет создан Mb2.

Для его хранения вам понадобится Flash, который можно получить несколькими способами:

FacesContext.getCurrentInstance().getExternalContext().getFlash();

Или же

@ManagedProperty("#{flash}")
private Flash flash;

public void setFlash(Flash jsfFlash) {
    flash = jsfFlash;
}

Flash сам по себе является картой (как и для запроса и сеанса), поэтому вы можете поместить туда свой объект:

ManagingObject o = new ManagingObject();
//Initialize the object and set the desired properties.
flash.put("ManagingObject", mo);

Затем вы можете получить этот объект в Mb2 получив Flash а затем взять объект от него, например, в preRenderView определенное событие.

Другие вопросы по тегам