代码之家  ›  专栏  ›  技术社区  ›  Tuukka Mustonen

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

  •  2
  • Tuukka Mustonen  · 技术社区  · 15 年前

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

    我已经初始化了我自己的 ExceptionHandlerFactory ExceptionHandler ExceptionQueueEvents 成功。但是,我不知道如何指示JSF继续加载页面,尽管出现了错误。这是正确的方法吗?ExceptionHandler是在处理facelet之后调用的(如我所想),还是在处理facelet的中间调用的?如果之后,有什么我能做的吗 异常处理程序

    我知道我应该:

    • 隐藏用户无法访问的部分(我的特定案例与安全性有关,当用户尝试加载他无权访问的内容时)。然而,我正在寻找一个全球性的答案)
    • 手动处理错误,以便不会引发意外异常

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

    我使用的是Mojarra 2.0.2。我觉得这是一个很容易解决的问题,但我想不出来:(

    2 回复  |  直到 15 年前
        1
  •  1
  •   BalusC    15 年前

    这样做意味着您将给最终用户一个半成品的HTML页面(因为JSF还没有(也不能)完成HTML呈现),而且它是未指定的 怎样

        2
  •  2
  •   Java Drinker    15 年前

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

    巴卢斯克 是绝对正确的,你不应该试图处理任何解析异常等奇怪的呈现页段不是用户友好的,并可能导致非常奇怪的结果。

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