使用以下内容设置自定义异常处理程序 sans web.xml:
FactoryFinder.setFactory(FactoryFinder.EXCEPTION_HANDLER_FACTORY,"org.omnifaces.exceptionhandler.FullAjaxExceptionHandlerFactory");
这里的诀窍是确保在启动时尽可能早地执行此行;一旦FactoryFinder.getFactory()被 JSF 运行时调用,更改已配置的处理程序就为时已晚。
好消息是我实际上在 Mojarra 代码库中找不到默认设置异常处理程序工厂的任何地方,因此您可能可以在@PostConstructor任何@ApplicationScopedbean 的构造函数(而不是 )中执行它。您也可以在 ame bean 的静态初始化程序中执行此操作。
此外,您可以在FacesInitializer. 因此,假设您正在运行 Mojarra,您需要在 servlet 上下文的启动过程中尽早设置处理程序
public class YourWebAppInitializer extends FacesInitializer implements WebApplicationInitializer {
public void onStartup(ServletContext ctxt) throws ServletException {
AnnotationConfigWebApplicationContext root = new AnnotationConfigWebApplicationContext();
root.register(YourSpringConfigClass.class);
ctxt.addListener(new ContextLoaderListener(root));
FactoryFinder.setFactory(FactoryFinder.EXCEPTION_HANDLER_FACTORY,"org.omnifaces.exceptionhandler.FullAjaxExceptionHandlerFactory");
}
}
这WebApplicationInitializer是 Spring 支持的用于引导 Web 应用程序的标准接口,我假设你已经有了它,因为你没有 web.xml - 随意onStartup用你的任何东西替换方法的内容实际执行。这里的关键是确保在应用程序启动的早期设置工厂。
另请注意,您可以ExceptionHandler在任何给定的实例上手动设置实际值FacesContext(尽管我尚未对此进行测试以查看它的行为方式或性能是否良好)