gpt4 book ai didi

jsf-2 - 捕获异常后重定向的问题

转载 作者:行者123 更新时间:2023-12-01 07:39:48 26 4
gpt4 key购买 nike

我的自定义 ExceptionHandler 中的重定向有问题。 ExceptionHandler 应该处理 NullPointerExceptions 并在发生异常时执行重定向。这是负责重定向的处理程序部分:

FacesContext fc = FacesContext.getCurrentInstance();
NavigationHandler nav = fc.getApplication().getNavigationHandler();
nav.handleNavigation(fc, null, "error" );

我有一个简单的页面来测试 ExceptionHandler:
<h:outputText value="#{requestTestBean.firstname}" />

在 firstname 的 getter-Method 中,我强制使用 NullPointerException:
Object x = null;
x.toString();

重定向到我的错误页面对于这个小例子来说效果很好,但是当我在页面上添加相当多的内容时(比如带有许多条目和图标的菜单)重定向不起作用,因为响应已经在 exceptionHandler 方法中提交。我还尝试通过 response.sendRedirect() 重定向到错误页面,但发生了同样的问题。

为什么响应已经提交?是否有任何上下文参数或其他任何东西可以防止这种行为?

谢谢

最佳答案

这就是为什么在 getter 中执行业务逻辑是一个非常糟糕的主意的众多原因之一。

但是好吧,让我们假设这是一个非常极端的需求/用例,其中涉及开发不良的代码(您知道,像 NPE 这样的运行时异常实际上是开发人员错误)。当超过某个响应正文缓冲区限制时,将提交响应。这通常约为 2KB,真正的默认值可在应用程序服务器级别进行配置。但是您也可以通过名称为 javax.faces.FACELETS_BUFFER_SIZE 的上下文参数对其进行配置。它接受以字节为单位的缓冲区大小。这是一个将其设置为 1MB 的示例。

<context-param>
<param-name>javax.faces.FACELETS_BUFFER_SIZE</param-name>
<param-value>1048576</param-value>
</context-param>

它将在幕后设置 ServletResponse#setBufferSize() 在每一个回应。

同样,这实际上是解决您的具体问题的方法,因此是一种糟糕的方法。真正的问题应该在代码中解决,让 getter 只返回 bean 属性而不返回其他任何东西。业务逻辑需要在 bean 的构造函数、后构造函数或任何事件( Action )方法中完成。它们在渲染响应阶段之前执行很长时间,因此您有机会处理异常。

关于jsf-2 - 捕获异常后重定向的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5893460/

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