2010-12-08 3 views
3

나는 어떤 범위를 사용해야하는지 혼란 스럽습니다.JSF 2 : 어떤 범위를 사용해야합니까?

여기에는 페이지 탐색과 같은 4 레벨의 페이지로 구성된 모듈이 있습니다. 자세한 내용은 해당 헤더 페이지 하위 세부 정보 페이지의 페이지 세부 정보를 참조하십시오. 나는 각 페이지가 자신의 managedbean을 가질 것이라고 생각했다.

레벨 4 (하위 세부 정보 페이지) 인 가장 깊은 레벨은 외부 레벨에서 다른 모든 관리 빈의 상태에 액세스 할 수 있습니다. 레벨 3 (세부 사항 페이지)은 레벨 2 managedbean의 상태 (헤더 페이지) 및 레벨 1 managedbean의 상태 (찾아보기)에 액세스 할 수 있습니다. 깊은 수준 페이지가 외부 수준에서 다른 상태에 액세스해야하기 때문에

외부 ManagedBean은의 습관은, 깊은 ManagedBean은의 상태하지 않을 것이다 요청 범위를 사용

액세스 할 수 있습니다.

세션 범위를 사용하면 사용자가 관련이없는 다른 프로그램 모듈로 전환 할 때 메모리가 소모되고 사용되지 않는 빈은 세션 동안 메모리에 남아있게됩니다. 그리고 또 다른 탭에서 이러한 페이지 체인을 열 수 없습니다.

마법사 스타일 페이지 나 퀴즈 페이지처럼 명확한 begin() 및 end()가 없기 때문에 대화 범위를 사용하는 것이 혼란 스럽습니다. 사용자는이 페이지를 사용하여 n을 뒤로 전환하고 모든 페이지에서 작업을 수행 할 수 있습니다.

뷰 범위를 사용하는 것이 가능하지만 한 페이지에서 다른 페이지로 전달되는 매개 변수를 사용해야합니다. 더 깊은 레벨 빈은 외부 빈에 액세스 할 수 없지만 이전 페이지에서 문자열 매개 변수를 수신 할 수 있습니다. 이전의 관리 빈에서 수행되었을 수있는 데이터베이스의 많은 정보를 다시 쿼리해야 할 수도 있기 때문에 좀보기가 어렵습니다.

내가 잘못 생각하고 있습니까?

의견을 말하십시오. JSF 2의 새로운 플래시 범위는 당신을 도울 수


알버트 캄

+0

매개 변수를 사용하면 HTTP 요청 매개 변수에 대해 이야기하고 있습니까? – BalusC

+0

하나의 뷰 스코프에서 다른 뷰 스코프로 뷰 매개 변수를 전달하는 것은 소스 페이지의 h : button 및 중첩 된 f : param과 대상 페이지의 중첩 된 f : viewParam이있는 f : 메타 데이터로 이루어진 것입니다. 나 자신은 확실하지 않지만, 뷰 범위에서 한 페이지에서 다른 페이지로 매개 변수를 전달할 수 있다고 생각할 수있는 것만 있습니다. – bertie

답변

3

을 주셔서 감사합니다. 한 번 읽은 후에 지워지는 세션 범위처럼 생각하십시오. 주석이 아닌지도가 다른 스코프와 조금 다릅니다. page2에서 플래시 스코프에 필요한 모든 정보를 page1에서 가져 와서 page2에 PostConstruct annoted 메소드를 읽은 다음 3 페이지에서 필요한 모든 데이터를 넣는 등의 작업을 할 수 있습니다. 약간 지저분하지만 적어도 뷰 매개 변수를 사용할 필요는 없습니다. 실제 관리 Bean은 Requestscoped 일 수 있습니다. 그것은 다음과 같이 보일 것입니다 : 당신은 짧은 예를 here을 찾을 수 있습니다

@public String toLevel2Button(){ 
    ELFlash.getFlash().put("data1", object1); 
    ELFlash.getFlash().put("data2", object2); 
    return "level2"; 

Level2Bean

@PostConstruct 
public void init(){ 
    object1 = (MyType1)ELFlash.getFlash().get("data1"); 
    object2 = (MyType2)ELFlash.getFlash().get("data2"); 
} 

public String toLevel3(){ 
    ELFlash.getFlash().put("data1", object1); 
    ELFlash.getFlash().put("data2", object2); 
    ELFlash.getFlash().put("data3", object3); 
    return "level3"; 
} 

Level1Bean. 플래시 스코프는보기에서 직접 읽을 수 있습니다. 이 외에도, 뷰 매개 변수를 사용하지 않고 뷰간에 데이터를 전송하는 방법을 생각할 수 없습니다.

+0

오 세상에. 나는 그것에 대해 한 번 읽었지 만 나는 잊었다. 나는 당신을 충분히 감사하지 않는다 !!!!!! 고맙습니다 !! – bertie

+0

"한번 읽은 후에 지워졌습니다"- 이론적으로는 아이디어입니다. 너무 좋지는 않지만 실제로는 그렇지 않습니다.이 훌륭한 아이디어의 구현이 매우 까다 롭습니다. –

관련 문제