gpt4 book ai didi

jsf - FullAjaxExceptionHandler 在 session 无效后不会重定向到错误页面

转载 作者:行者123 更新时间:2023-12-04 21:24:13 32 4
gpt4 key购买 nike

我在使用 Omnifaces FullAjaxExceptionHandler ( http://showcase.omnifaces.org/exceptionhandlers/FullAjaxExceptionHandler ) 时遇到问题。 session失效后不重定向到指定的错误页面。

我的 faces-config 中有以下内容:

<factory>
<exception-handler-factory>org.omnifaces.exceptionhandler.FullAjaxExceptionHandlerFactory</exception-handler-factory>
</factory>

以及我的 web.xml 中的以下内容:

<error-page>
<exception-type>javax.faces.application.ViewExpiredException</exception-type>
<location>/pages/error/viewExpired.html</location>
</error-page>

在我使 session 无效后,从用户的角度来看,似乎什么也没有发生。该应用程序只是“死”了。在我的控制台中,我看到以下 Ajax 请求:

  • 响应代码为 302 的原始 facelet 页面的 POST
  • 使用代码 200 获取登录页面(但没有任何反应,因为它是通过 Ajax 请求的)

我在 WebLogic 12c 上运行 MyFaces 2.1.10、Primefaces 3.5、Primefaces Extension 0.6.3 和 Omnifaces 1.4.1

谁能帮助我朝着正确的方向前进?如何让 FullAjaxExeptionHandler 正常工作?

谢谢

最佳答案

A POST to the original facelet page with a response code of 302

这是不对的。 JSF ajax 请求的重定向必须具有 200 的响应代码以及带有 <redirect> 的特殊 XML 响应。在其 url 中具有目标 URL 的元素属性。

这表明您手动使用了 HttpServletResponse#sendRedirect()在 JSF 有机会处理 ViewExpiredException 之前很久的某个地方.

也许您在某处有一个 servlet 过滤器,它检查某些 session 属性并根据其存在/状态发送重定向?然后应根据以下答案操作该过滤器:JSF Filter not redirecting After Initial Redirect为了识别 JSF ajax 请求并返回特殊的 XML 响应而不是 302 响应。

例如

if ("partial/ajax".equals(request.getHeader("Faces-Request"))) {
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 {
response.sendRedirect(loginURL);
}

这一切与 FullAjaxExceptionHandler 完全无关. JSF 没有任何机会抛出 ViewExpiredException因为您已经预先发送了重定向。

关于jsf - FullAjaxExceptionHandler 在 session 无效后不会重定向到错误页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16030922/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com