2012-02-05 2 views
11

jsf 2에서 플래시 스코프 사용에 대한 오해가 있습니다. 조치 중에 플래시 맵에 오브젝트를 넣고이 오브젝트를 다음 페이지에 표시하고 싶습니다.리디렉션 후 플래시 범위의 오브젝트를 사용할 수 없습니다.

public String showDetail(PersonneDTO personne) { 
    MessageFlashBean message = new MessageFlashBean(); 
    message.addMessage("test"); 
    FacesContext.getCurrentInstance().getExternalContext().getFlash() 
     .put("test", message); 
    return "showDetail"; 
} 

그냥 테스트,하지만 내가 사용하려는 실제 개체가 더 복잡하다 : 여기 내 행동 (: CommandLink는이 시간에 의해 호출)입니다. 여기

<ui:fragment rendered="#{flash.test != null and flash.test.hasMessage()}" > 
    <ui:repeat var="message" value="#{flash.test.messages}"> 
     #{message} 
    </ui:repeat> 
</ui:fragment> 

탐색 (그리고 여기 내 문제입니다 :)) :이 경우

<navigation-rule> 
    <from-view-id>/index.xhtml</from-view-id> 
    <navigation-case> 
     <from-outcome>showDetail</from-outcome> 
     <to-view-id>/private/showDetail.xhtml</to-view-id> 
    </navigation-case> 
</navigation-rule> 

, 플래시 범위 작품 여기

두 번째 플래시 사용하여 페이지입니다 좋아, 내 메시지가 나타납니다.

내비게이션 케이스에 리디렉션을 추가하면 플래시지도의 개체가 사라집니다.

탐색 규칙에서 리디렉션을 사용할 수없는 이유를 이해할 수 없습니다 (플래시 범위의 목표라고 생각했습니다).

내 코드에 뭔가 잘못되었을 수 있습니다.

누군가 나를 도울 수 있습니까?

감사

+0

JSF 2.0.3.FCS에서 시도한 바 있습니다. 리디렉션에서 살아 남았습니다. – Ravi

답변

14

JSF2 플래시 범위 had a lot of problems의 인 Mojarra의 구현입니다. 그들 대부분은 새로운 Mojarra 출시 때마다 해결되었습니다. 현재 가장 최신의 Mojarra version 인 2.1.6을 사용하면 다른 주요 경로로 리디렉션 할 경우 작동하지 않습니다. 긴 토론에서 (현재) 마지막 코멘트를 issue 1751에 표시하십시오.

은 지금, 당신은 기본적으로 다음과 같은 옵션을 사용할 수 있습니다

  1. 는 다른 기본 경로로 리디렉션해야 할 때 플래시를 사용하여 잊어 버려요. 대신 요청 매개 변수를 사용하거나 사용자 정의 쿠키로 플래시 범위를 시뮬레이션하십시오.

  2. 가능한 경우 플래시 범위가 생존해야 할 때 다른 기본 경로로 리디렉션 할 필요가 없도록 폴더 구조를 재구성하십시오.

  3. Mojarra 대신 MyFaces을 시도하십시오. 어쩌면 플래시 범위와 관련하여 더 나은 방법 일 수 있습니다.


업데이트는 : issue 2136에 따라, 플래시 범위가 다른 경로에 리디렉션 후 사용할 수없는 마지막 개방 문제는 곧 다가오는 인 Mojarra 2.1.14에 해결된다. 따라서이 버전에서는 모두 플래시 범위 관련 문제가 발견되어 지금까지 열려 있으니 을 해결해야합니다.

+0

고마워요, 저는 Mojarra 2.1.6을 사용했고이 버그를 보지 못했습니다. 그건 내 사건이야. 2.0.3 버전으로 돌아가겠습니다. – Kiva

2

jsf 2.1 with netbeans는 플래시에서이 문제가 있습니다. /somepage?redirect-faces=true or /somedirectory/somepage?faces-redirect=true을 사용하면 작동하지 않습니다. somepage?redirect-faces=true이어야합니다.

mojarra 2.1.7을 테스트했지만 위와 같은 문제가 없었습니다.

+2

IDE가 중요하지 않다고 생각합니다. –