2011-09-21 6 views
6

MyFaces 2.0을 사용하는 JSF 페이지가 있는데 처음 표시 될 때 약간의 데이터 수집이 수행됩니다. 일부 정보를 찾을 수 없으면 해당 효과에 대한 메시지를 제공하고 다른 페이지로 다시 리디렉션됩니다. 여기에 발견 된 솔루션을 사용하여 시도했으나 Preserving FacesMessage after redirect for presentation through <h:message> in JSF (setKeepMessages (true)) 리디렉션 후에 메시지가 표시되지 않습니다. 내가 선택할 수있는 유일한 차이점은 탐색 규칙을 사용하지 않는다는 것입니다. 정상적인 동작에서 발생하지 않기 때문에 외부 컨텍스트에서 redirect() 호출을 호출하고 있습니다.리디렉션 후 JSF 메시지 보존

관련 코드 :

public void redirectToPageWithMessage(String inPage, String message, FacesMessage.Severity severity){ 
    getFlash().setKeepMessages(true); 
    addMessage(message, severity); 
    try { 
     getFacesContext().getExternalContext().redirect(inPage); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

불행하게도이 작동하지 않는 것 같습니다. 리디렉션은 잘 발생하지만 < messages /> 태그는 메시지를 표시하지 않습니다. 리다이렉트 (redirect)가 어떻게 작동하는지에 대한 다른 무언가가 있을까요?

답변

4

메시지를 저장하는 코드는 단계가 끝난 후에 실행됩니다 (Flash.doPostPhaseActions (FacesContext) 참조). 따라서 작동하지 않을 것으로 예상되지만 리디렉션 전에 Flash.doPostPhaseActions를 호출 할 수 있습니다. 참고는 "깨끗한"솔루션이 아니지만 가능합니다.

+0

결과를 반환하지 않는 함수 내부로 리디렉션하는 더 좋은 방법이 있습니까 (redirect()를 호출하는 것 외에 다른 방법이 있습니까? – moneyt

0

JSFMessages는 실제 요청을 처리하기 위해서만 유지됩니다. 리디렉션을 사용할 때 두 번째 요청이 이루어 지므로 JSFMessages가 손실됩니다. EL-Flash는이 문제를 해결하는 방법입니다. 이 예제가 작동해야합니다 : http://ocpsoft.com/java/persist-and-pass-facesmessages-over-page-redirects/

+3

질문의 코드 조각 인'setKeepMessages (true)'와'getFlash(). setKeepMessages (true);'에 대한 첫 번째 단락을 놓치셨습니까? 그는 이미 ** 플래시를 사용하고 있지만'ExternalContext # redirect() '와 함께 제대로 작동하지 않습니다. – BalusC

0

나는 동일한 문제가 있었는데 ExternalContext.redirect()을 사용하지 않고 해결했지만 당신의 행동에 대한 결과를 가지고 놀았습니다.

즉, 내 버튼으로 호출되는 동작은 내비게이션 규칙을 나타내는 String (결과)을 반환하여 다음 페이지로 이동합니다. 해당 시스템에서는 메시지가 보존됩니다.

+1

이제 리디렉션 대신 전달 중입니다. 그 때문에'Flash # setKeepMessages()'는 더 이상 필요하지 않습니다. 아니면 전혀 사용하지 않았습니까? – BalusC

+0

당신 말이 맞아요. 사용을 멈췄습니다. 실제로, 나는 버그 [WELD-1218] (https://issues.jboss.org/browse/WELD-1218)를 만났을 때 그것을 발견했습니다. –