이 질문에 많은 질문이 있었지만 거의 모든 메시지에 다음과 같은 코드가 추가 될 것을 제안합니다. FullAjaxExceptionHandler가 일반 대신 아약스 리디렉션 일의 리디렉션 (this similar question 참조)FullAjaxExceptionHandler가 Ajax 요청에 대한 오류 페이지로 리디렉션하지 않음
if ("partial/ajax".equals(request.getHeader("Faces-Request"))) {
// JSF ajax request. Return special XML response which instructs JavaScript that it should in turn perform a redirect.
response.setContentType("text/xml");
response.getWriter()
.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>")
.printf("<partial-response><redirect url=\"%s\"></redirect></partial-response>", loginURL);
} else {
// Normal request. Perform redirect as usual.
response.sendRedirect(loginURL);
}
내 질문은 단순히 모든 오류 처리를 할 Omnifaces의 FullAjaxExceptionHandler를 구성하고있어 것입니다, 나는 가로 채고 그 봄 보안 또는 컨테이너 보안을 관리하지 않아도 FullAjaxExceptionHandler가 요청하기 전에 그 일을 할 수 있습니다. FullAjaxExceptionHandler로 중단 점을 만들면 다음 코드 줄을 실행하면 내 오류 페이지가 여전히 리디렉션되지 않는 것을 볼 수 있습니다.
String viewId = Faces.normalizeViewId(errorPageLocation);
ViewHandler viewHandler = context.getApplication().getViewHandler();
UIViewRoot viewRoot = viewHandler.createView(context, viewId);
context.setViewRoot(viewRoot);
context.getPartialViewContext().setRenderAll(true);
...
context.renderResponse();
대신, 예외가 시작된 Ajax 요청이 그것의 응답 본문에 있습니다
그것은 어떻게 해야하는 일을하지 않거나 내가 뭔가를 놓친 거지 FullAjaxExceptionHandler과 같은<?xml version='1.0' encoding='UTF-8'?>
<partial-response>
<changes>
<update id="javax.faces.ViewRoot"><![CDATA[<html xmlns="http://www.w3.org/1999/xhtml">... html of error page here ... </html>]]></update>
<update id="javax.faces.ViewState"><![CDATA[-3527653129719750158:5595502883804776498]]></update>
</changes>
</partial-response>
?
업데이트
브라우저 JS 출력 콘솔 화면 캡 부착.
<script type="text/javascript">
//<![CDATA[
scrollTo(0, 0);
//]]>
</script>
이 : 문제는
내 오류 페이지의 HTML 형식이 잘못된 것으로 밝혀을 식별
, 그것은 브라우저에서 일치하지 않는 태그 오류가 발생 다음 코드를 포함 CDATA 태그를 조기에 폐쇄 한 것처럼 보였다. 이 HTML은 <h:outputScript/>
태그의 결과입니다. 실제로 필요하지 않기 때문에 제거했습니다.
어떤 PrimeFaces 버전입니까? 이전 버전은'@ all' : https://code.google.com/p/omnifaces/wiki/KnownIssues#PrimeFaces_2.0-3에 문제가있었습니다.1 적어도 PrimeFaces (및 번들 jQuery)가 원인이되지 않도록 제외하려면'
대신''을 사용하면 어떨까요? Ajax 응답은 완전히 멋지게 보입니다. 그래서 그 단계까지 모든 것이 잘됩니다. 어떤 이유로 JavaScript에 의해 현재 HTML 문서에 적용되지 않았으므로 문제는 본질적으로 JS 측면에 있습니다. JS 컨텍스트에 오류/충돌이있는 경우에도 발생할 수 있습니다. JS 콘솔을 확인 했습니까? –
BalusC
PF3.5를 사용하고 있습니다. 내 콘솔에서 볼 수있는 유일한 오류는 부분 업데이트를 구문 분석하지 못했기 때문입니다. 콘솔 화면 캡처로 내 게시물을 업데이트합니다. PF 버튼을 사용하지 않고으로 바꿨습니다. 실제로 예상대로 오류 페이지로 리디렉션되었습니다. 제 마지막으로 고칠 수있는 것이 있는지 확실하지 않습니까? –
citress
그래, 이것은 PF 문제입니다. 답변을 게시하기 전에 어떤 브라우저를 사용하고 있는지 알고 싶습니다. 또한 ''또는 ''가있는 경우에도 알고 싶습니다. –
BalusC