2013-09-29 7 views
0

JSF에서 오류 페이지를 동적으로 설정하고 싶습니다. 특히 제가하고 싶은 것은 ViewExpiredException 페이지를 새로 고침 할 때마다입니다. 현재 omnifaces FullAjaxExceptionHandler을 사용하여 예외를 관리하고 있지만 오류 페이지는 web.xml에서 읽습니다.JSF/AJAX에서 예외에 대한 오류 페이지를 동적으로 구성하는 방법이 있습니까?

쉬운 방법이 있나요? onError 이벤트를 사용하여 클라이언트 측 탐색을 고려해야합니까 아니면 FullAjaxExceptionHandler.findErrorPageLocation을 덮어 쓰시겠습니까?

답변

1

오류 페이지는 web.xml에서 읽습니다. 그 이유는 처음부터 JSF ajax를 사용하지 않은 경우 사용 방법이 표준 방법이기 때문입니다. 즉, FullAjaxExceptionHandler은 예외 처리 및 오류 페이지 표시가 예를 들어 ajax를 사용하지 않을 때와 완전히 동일하게 작동하도록합니다. <h:commandButton> (<f:ajax> 또는 <p:commandButton ajax="false"> 제외)이거나 최종 사용자가 JS를 사용할 수 없으므로

실제로 예외 처리기를 확장하고 findErrorPageLocation 메서드를 재정 의하여 제어 할 수 있지만 더 이상 표준 방식과 같은 방식으로 작동하지 않습니다.

특정 경우 더 좋은 방법은 ViewExpiredException에 대한 특정 오류 페이지를 지정하고 일반적인 요청 속성으로 초기 페이지를 가져 와서 페이지로드시 JavaScript로 리다이렉트하도록하는 것입니다.

<h:outputScript> 
    window.location = "#{requestScope['javax.servlet.error.request_uri']}"; 
</h:outputScript> 

보너스로, JSF ajax를 사용하지 않을 때와 똑같은 방식으로 작동합니다.


이 모든 것이 어떻게 사용자 경험을 향상시킬 수 있는지 궁금합니다. 이는 최종 사용자에게 혼란을 야기 할 수 있습니다. 다시 게시하는 동안 세션이 만료되면 추가 피드백없이 자체적으로 다시로드되는 페이지입니다.

+0

응답 해 주셔서 감사합니다. 사용자가 데이터를 제출하는 경우에는 맞지만, 제 경우에는 아약스 항법 (페이지의 다른 부분 렌더링)을 처리하고 싶습니다. 이 경우 뷰가 만료되었음을 사용자가 알아야하는 이유를 생각할 수 없습니다. 내가 놓친 게 있니? –

+0

어,이 방법은 입력 양식이 의도 한대로 작동하지 않습니다. 제출 된 모든 데이터가 손실되고 성공/실패 제출에 대한 의견이 전혀 없으므로 페이지가 다시로드됩니다. 이 모든 것은 매우 혼란 스럽습니다. 로그인 양식을 채우는 것과 마찬가지로 매우 동일한 로그인 양식이 피드백없이 다시 표시됩니다. 양식이있는 원래 페이지에 대한 링크와 함께 "죄송합니다. 세션이 만료되었습니다"오류 페이지를 표시하는 것이 좋습니다. – BalusC

+0

포인트가 찍혔습니다. 어떻게 페이스 북과 링크드 인 같은 웹 사이트가 이것을 피합니까? 그들은 단지 세션을 영원히 계속 살고 있습니까? 만료되기 전에 페이지를 새로 고 칩니 까? –