2013-06-22 6 views
0

에 내가 자바 EE 애플리케이션을 JSF2 + PrettyFaces + EBJ3 + 글래스 피시세션을 만들 수 없습니다 - 내가 사용하는 곳 PrettyFaces MultiPageMessagesSupport이 Glassfish4

기본 서버 구현은 내가 최근에 Glassfish4으로 업데이트

Java EE 7에서 PrettyFaces로 문제가 발생하기 시작했습니다.

내 얼굴-config.xml 파일에 설정 한 : 얼굴 메시지 주위에 제대로 전달되고 화면에 표시하는

<lifecycle> 
    <phase-listener>com.ocpsoft.pretty.faces.event.MultiPageMessagesSupport</phase-listener> 
</lifecycle>  

활성화 할 수 있습니다.

java.lang.IllegalStateException : 응답이 이 를 저지른 후 ... 세션을 만들 수 없습니다

 at com.ocpsoft.pretty.faces.util.FacesMessagesUtils.saveMessages(FacesMe 
ssagesUtils.java:56) 
     at com.ocpsoft.pretty.faces.event.MultiPageMessagesSupport.afterPhase(Mu 
ltiPageMessagesSupport.java:66) 

내가 4 Glassfish3 업그레이드 이후

는하지만이 문제를 받기 시작했다 faces-config.xml에서 리스너를 제거하면 Faces 메시지가 화면에 표시되지 않습니다.

내 사이트에서 SEO 기능을 향상시키기 위해 예쁜 형식의 URL을 사용하려면 PrettyFaces를 사용하고 있습니다. 이미 그것을 사용하는 탐색 흐름을 많이 매핑 했으므로 앱을 사용하지 않기 위해 앱을 교체하거나 리팩토링 할 필요가 없었 으면합니다. 누군가이 시나리오에 대해 더 나은 옵션을 알고 있습니까? 정말 고맙게 생각합니다. 감사.

+0

내가 더 PrettyFaces 전문가하지만 [상태 저장 방법] 조정을 해요 (http://stackoverflow.com/q/8471551/1530938) 문제를 해결하는 데 도움이 될 수 있습니다. GF4는 공식적으로 출시되지 않은 JSF2.2와 함께 제공되기 때문에 어딘가에 버그 (또는 일부 비 호환성)가 있습니다. – kolossus

답변

1

JSF 2.2가 지원되는 "최신"컨테이너에 배포하는 경우 MultiPageMessagesSupport을 사용하지 않는 것이 좋습니다. MultiPageMessagesSupport 위상 수신기는 JSF 1.x 용으로 개발되었습니다. JSF 2.x는 리디렉션에서 지속되는 메시지에 대한 지원을 추가했습니다. 그냥 리디렉션하기 전에이 코드를 실행합니다

FacesContext.getCurrentInstance().getExternalContext().getFlash().setKeepMessages(true); 
+0

그렇다면 모든 JSF 탐색 케이스가 "pretty :"또는 "pretty : something"을 반환하기 전에이 코드 행을 배치해야합니다. – guilhebl

+0

예, 또는 RESTORE_VIEW 이후의 모든 요청에서이 메소드를 호출하는 PhaseListener를 작성할 수 있습니다. 솔직하게 말해서, 나는이 일에 대한 일반적인 관행이 무엇인지 잘 모르겠습니다. 나 자신을 위해 메시지 대기열에 메시지를 추가 한 후 항상이 플래그를 설정하는 메시지 대기열 사용 메시지 도우미 클래스가 있습니다. – chkal