2

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

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

我知道我应该:

  • 隐藏用户无法访问的部分(我的具体情况与安全性有关,当用户尝试加载他无权访问的内容时。但是,我正在寻找一个全球性的答案)
  • 手动处理错误,因此不会引发意外异常

但是,我希望用户能够继续使用系统,尽管出现了一些小组件故障(例如,如果某些新闻提要 portlet 抛出不应阻止用户查看和使用其他内容的错误)。

我正在使用 Mojarra 2.0.2。我觉得这是一个非常容易解决的问题,但我无法弄清楚:(

4

2 回答 2

2

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

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

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

于 2010-07-09T12:40:27.137 回答
1

这样做意味着您为最终用户提供了一个半生不熟的 HTML 页面(因为 JSF 尚未(也不能)完成 HTML 呈现),并且未指定网络浏览器将如何显示该页面。

不要这样做。

于 2010-07-09T11:18:14.667 回答