2013-05-06 7 views
0

각 페이지 (mb1 및 mb2)마다 두 개의 페이지 (page1과 page2라고 가정 해 보겠습니다)와 하나의 magaedBean이 있습니다. 012b은 mb1에서 mb2의 인스턴스를 가지며 mb1의 메소드에 의해 이전에 설정된 모든 속성이 있습니다. 이런 식으로 뭔가 :다른 managedBean에서 managedBean을 복원하는 방법

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

내가 페이지 2 (MB2)의 컨트롤러가 MB1에 저장된 인스턴스가있는 방식으로 뷰 페이지 2를 엽니, MB1의 방법에서입니다 원하는.

내 managedBeans는 모두 ViewScoped 여야합니다. 세션 스코프를 사용하여이 작업을 수행 할 수 있지만 이것이 필요한 것은 아닙니다. 이렇게하는 방법이 있습니까?

+0

JSF 버전을 사용하고 있습니까? 다른 하나를 초기화 할 책임이있는 bean을 만들지는 않을 것입니다 ... – Gamb

+0

또한, Mb1이하는 일은 Mb2가 스스로 할 수없는 것입니까? – Gamb

+0

그것은 페이지 사이의 의사 소통 ... 이것은 두 개의 crud 페이지입니다. 특정 엔티티에 대한 각각의 페이지입니다. –

답변

0

관리 빈이 다른 초기화를 담당하는 이유는 무엇입니까? 그는 자신을 초기화 할 수 있도록 Mb2에게 필요한 정보를 제공하고 싶습니다. 당신이 객체를 전달하고 Mb2의 자체 초기화를 피하고 (당신이 JSF 2를 사용하는 가정)에 설정하는 경우

, 나는 당신이 JSF의 플래시 범위를 살펴 보시기 바랍니다.

터프 플래시은 그 자체로 범위가 아니며 루비의 POST - REDIRECT - GET 패턴 구현에 기반한 기능입니다 (AFAIK). 빈을 매개 변수로 가지지 않고 데이터를 저장하고 Mb2을 조작하는 고유 한 객체를 만들 수 있습니다.

page2으로 이동해야하는 경우 해당 항목을 플래시에 저장하고 나중에 Mb2를 만들 때 검색하십시오. 단지 요청에 대한 것과 같은지도를 (인 플래시 자체

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); 

그런 다음 Flash을 가져 와서 해당 개체를 가져올 수 있습니다 (예 : preRenderView 정의 된 이벤트에서 개체를 Mb2으로 가져올 수 있음).

관련 문제