在我的应用程序中(使用弹簧),
我尝试使用spring exposingBean 从视图中调用一个方法。当我尝试从视图中调用一个方法时,它会抛出错误。我尝试用 HandlerExceptionResolver 捕捉,但没有运气,我认为它无法由 HandlerExceptionResolver 处理,因为没有向控制器抛出异常。
所以我尝试另一种方式在抛出异常时重定向请求。我认为方面有可能做到这一点。从方面抛出异常时是否可以重定向请求?
在我的应用程序中(使用弹簧),
我尝试使用spring exposingBean 从视图中调用一个方法。当我尝试从视图中调用一个方法时,它会抛出错误。我尝试用 HandlerExceptionResolver 捕捉,但没有运气,我认为它无法由 HandlerExceptionResolver 处理,因为没有向控制器抛出异常。
所以我尝试另一种方式在抛出异常时重定向请求。我认为方面有可能做到这一点。从方面抛出异常时是否可以重定向请求?
正如您所说的那样,HandlerExceptionResolver
当从视图内部引发异常时,不会调用。这些解析器非常专门针对控制器异常。
您最好的选择是使用 aHandlerInterceptor
并覆盖该afterCompletion
方法,该方法将包含视图抛出的异常。您可以从此处发送重定向,具体取决于视图是否已提交响应。
我也看不出方面会如何帮助你。不是这项工作的工具。
但是,我对您的建议是停止在您的 JSP 中使用暴露的 bean。我意识到它非常方便,但这是您使用它时遇到的麻烦。我建议您的控制器组装视图所需的所有数据,将其粘贴到模型中,然后将其发送到视图。这样,视图触发异常的危险就更小了,因为它已经拥有了它需要的一切。
此外,如果您需要发送重定向,那么您确实需要在视图开始执行之前执行此操作。否则,视图层可能会在抛出异常之前开始写出 HTTP 响应标头。如果发生这种情况,那么您将无法发送重定向 - 响应是“已提交”。