在JSF页面中显示错误并继续呈现它而不是重定向到单独的错误页面

时间:2010-07-09 09:48:49

标签: java jsf exception-handling lifecycle

每当加载JSF facelet时出现错误,JSF就会在错误点停止呈现页面并显示错误页面(默认行为)。我希望JSF继续渲染页面并在页面中显示异常/错误。例如,如果页面正在加载一个抛出异常的“portlet”,那么该异常将在portlet中显示为文本。我不希望将整个页面转发到单独的错误页面。

我初始化了自己的ExceptionHandlerFactoryExceptionHandler实现,我可以成功迭代ExceptionQueueEvents。但是,我不知道如何指示JSF继续加载页面,尽管有错误。这甚至是正确的方法吗?是在调用ExceptionHandler(正如我想的那样)还是在中间处理facelet?如果之后,我可以在ExceptionHandler内做些什么吗?

我知道我应该:

  • 隐藏用户无法访问的部分(我的具体情况与安全性有关,当用户尝试加载他没有权利的内容时。但是,我正在寻找全局答案)
  • 手动处理错误,以免意外异常被抛出

但是,我希望用户能够继续使用系统,尽管有一些小的组件故障(例如,如果某个新闻源portlet抛出一个错误,不应该阻止用户看到其他内容并使用它)。 / p>

我正在使用Mojarra 2.0.2。我觉得这是一个非常简单的解决方法,但我无法弄明白:(

2 个答案:

答案 0 :(得分:2)

如果您的页面包含单独的内容,请考虑使用(i)帧。这样,如果某些特定内容无法加载,整个页面仍会呈现,但该帧将显示错误页面。这当然意味着所有单独的组件都是完整的html页面。

BalusC 绝对正确,您不应该尝试处理任何解析异常等。奇怪的呈现页面段不是用户友好的,并且可能导致非常奇怪的结果。

如果您有角色/权限问题,那些场景应该与jsf渲染分开维护。授权应在 转发到页面之前确认,而不是在尝试呈现时。

答案 1 :(得分:1)

这样做意味着你要给最终用户一个半熟的HTML页面(因为JSF没有(也不能)完成HTML渲染)而且未明确 web浏览器将如何显示页面。

不要这样做。