当前位置: 首页 > 知识库问答 >
问题:

处理AJAXified组件的JSF2.0异常的正确方法是什么?

咸昀
2023-03-14

我已经设置了web.xml,以便任何java.lang.Throwable(即任何未捕获的异常或错误)都将转发到错误页面。但是,对于AJAXified组件,异常不会通过这种机制路由到错误页。

我有的测试用例是一个简单的CommandButton绑定到一个始终抛出RuntimeException的action方法。最佳实践似乎是让action方法捕获异常,并添加一个类型为error Severity的FacesMessage。人们都是这样做的吗?是否有一种方法可以配置JSF,以便在AJAXified组件的支持bean方法抛出异常时显示错误页面?

共有1个答案

文喜
2023-03-14

您需要为此实现一个自定义的exceptionhandler,当ajax请求中发生异常时,它基本上执行以下操作:

String errorPageLocation = "/WEB-INF/errorpages/500.xhtml";
context.setViewRoot(context.getApplication().getViewHandler().createView(context, errorPageLocation));
context.getPartialViewContext().setRenderAll(true);
context.renderResponse();

如果您要考虑web.xml错误页,那么这并不是一件简单的事情。您需要解析整个web.xml来查找错误页面位置。此外,当呈现响应期间发生异常时,您基本上需要自己重新构建整个视图。OmniFaces组件库正好有这样一个异常处理程序,即FullaJaxExceptionHandler。您可以在这里找到完整的源代码和showcase示例。

  • 在JSF错误处理程序中使用ExternalContext.Dispatch会导致页面呈现损坏
  • JSF/PrimeFaces ajax请求上的会话超时和ViewExpiredException处理
 类似资料:
  • 问题内容: 我已经设置了web.xml,以便所有java.lang.Throwable(即任何未捕获的异常或错误)都可以转发到错误页面。但是,对于AJAXified组件,不会通过此机制将异常路由到错误页面。 我拥有的测试用例很简单,并且总是与引发的action方法绑定在一起。似乎最佳实践似乎是让action方法捕获异常并添加类型错误严重性。这是人们的工作吗?有没有一种方法可以配置JSF,以便如果A

  • 本文向大家介绍Java中断异常的正确处理方法,包括了Java中断异常的正确处理方法的使用技巧和注意事项,需要的朋友参考一下 处理InterruptedException 这个故事可能很熟悉:你正在写一个测试程序,你需要暂停某个线程一段时间,所以你调用 Thread.sleep()。然后编译器或 IDE 就会抱怨说 InterruptedException 没有抛出声明或捕获。什么是 Interru

  • 问题内容: 我使用10gen的本机node.js驱动器将mongodb(2.2.2)与node.js一起使用。 起初一切顺利。但是当涉及到并发基准测试部分时,会发生很多错误。频繁进行1000次并发连接/关闭可能会导致mongodb拒绝任何进一步的请求,并出现以下错误: 另外,如果许多客户端在没有显式关闭的情况下关闭,则mongodb将花费几分钟的时间来检测并关闭它们。这也将导致类似的连接问题。(使

  • 我试试看。js与mongodb(2.2.2)一起使用本机节点。js drive by 10gen。 起初一切都很顺利。但在并发基准测试部分,出现了很多错误。频繁连接/关闭1000次并发可能会导致mongodb拒绝任何进一步的请求,错误如下: 此外,如果很多客户端在没有显式关闭的情况下关闭,mongodb需要几分钟来检测并关闭它们。这也会导致类似的连接问题。(使用/var/log/mongodb/m

  • 我想知道,当我试图在数据库中创建并持久化对象时,处理异常的最佳方法。 因此,我有一个名为Rule的表,其中包含getter和setter: 我有一个方法create谁在数据库中添加对象: 我应该为每个异常使用多个catch吗?谁的方法可以抛出try块 如果我的解决方案是处理异常的好方法,那么如何才能以好的方式打印与异常相关的特定消息 如何在JUnit5中为块的内容引发异常,以测试是否引发了异常(我

  • 我有一个超时执行任务的方法。我使用ExecutorServer.submit()获取一个Future对象,然后调用future.get()并超时。这很好,但是我的问题是处理我的任务可能抛出的检查异常的最好方法。下面的代码工作正常,并且保留了被检查的异常,但是如果方法签名中被检查的异常的列表改变了,它看起来非常笨拙并且容易出错。 关于如何解决这个问题的任何建议?我需要以Java 5为目标,但我也很好