2012-01-09 91 views
1

我有一个自定义视图解析器和一个异常解析器。 当控制器代码抛出异常时,将调用异常解析器并将异常映射到带错误消息的视图上。处理从自定义视图解析器抛出的异常

但是,当我从其中一个视图解析程序抛出异常时,它会传播到应用程序服务器,并且不会使用注册的异常解析程序解析。

我想这会发生是因为异常解析器是'下面'视图解析器,因为它返回的视图必须解析...所以异常从视图解析器被抛出外面......但我仍然不知道如何处理以精心设计的方式处理这种情况。

请建议。

回答

1

通常,当异常解析器处理从控制器抛出的异常时,它将返回视图名称,以便可以呈现错误页面。

所以如果一个视图解析器抛出一个异常,你可以用它做什么有意义的事情?最终必须以某种方式渲染错误,但是谁将解析该视图,如果不是视图解析器本身?

要回答你的问题,我不知道任何机制来捕捉视图解析器抛出的异常,而不是标准的servlet容器机制。如果你的视图解析器中有错误条件,我建议你(a)修复它们(如果它们是错误的),或者(b)在内捕获视图解析器的异常,并渲染显示错误的不同视图。

+0

谢谢@skaffman的回复。我确实需要ViewResolver中的一个异常处理程序,因为它正在渲染一些Google Closure模板,并且可能会抛出一些异常,以防模板的某些渲染失败或无法在某处找到模板。您可以建议一种渲染方式ViewResolver本身内部的不同视图? – schhajed 2012-01-09 08:47:32

+0

@schhajed:那么你是说异常是从视图本身引发的,而不是视图解析器?视图解析器不渲染视图,他们只是将视图名称转换为'View'对象,然后将其分别渲染。 – skaffman 2012-01-09 09:26:24

+0

是的,在我的情况下,View本身可以抛出异常,因为** View **正在呈现Google Closure模板对象,如果没有提供正确的输入,则可能会失败。请建议。 – schhajed 2012-01-09 11:22:02