我能够使用 joinfaces 和 spring-boot 2 为 primefaces 配置错误处理。为了让它工作,我扩展了 PrimeExceptionHandlerFactory 以覆盖根据抛出的异常决定错误页面在哪里的方法。此扩展错误处理程序在 src/main/resources/META-INF/faces-config.xml 上配置。这种方法还启用了“p:ajaxExceptionHandler”组件功能。
就我而言,任何 web.xml 配置都被忽略了,我认为这是因为我使用了提供 Spring Boot 的嵌入式 tomcat。如果您正在部署读取 .war/.ear 应用程序,您可以只在 web.xml 中定义错误页面
这是一个相当的技巧,如果 joinfaces 可以在检测到 primefaces 时进行配置,那就太好了,需要错误处理才能创建带有 primefaces 的 JSF 应用程序。
完整的工作项目可以在以下位置找到:https ://github.com/ollbap/my-primefaces-spring-boot-skeleton
看:
面孔-config.xml
<?xml version="1.0" encoding="windows-1252"?>
<!DOCTYPE faces-config PUBLIC
"-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 2.2//EN"
"http://java.sun.com/dtd/web-facesconfig_2_2.dtd">
<faces-config xmlns="http://java.sun.com/JSF/Configuration">
<name>MyApplication</name>
<ordering>
<before>
<others />
</before>
</ordering>
<application>
<el-resolver>org.primefaces.application.exceptionhandler.PrimeExceptionHandlerELResolver</el-resolver>
</application>
<factory>
<exception-handler-factory>es.test.config.ExtendedPrimeExceptionHandlerFactory</exception-handler-factory>
</factory>
</faces-config>
ExtendedPrimeExceptionHandlerFactory.java
package es.test.config;
import java.util.Map;
import javax.faces.context.ExceptionHandler;
import javax.faces.context.ExceptionHandlerFactory;
import org.eclipse.jdt.annotation.Nullable;
import org.primefaces.application.exceptionhandler.PrimeExceptionHandler;
import org.primefaces.application.exceptionhandler.PrimeExceptionHandlerFactory;
/**
* Extended primefaces exception handler factory in order to create a exception
* handler that redirects to the desired error page.
*/
public class ExtendedPrimeExceptionHandlerFactory extends PrimeExceptionHandlerFactory {
private static final String ERROR_PAGE = "error.xhtml";
public ExtendedPrimeExceptionHandlerFactory(final ExceptionHandlerFactory wrapped) {
super(wrapped);
}
@Override
public ExceptionHandler getExceptionHandler() {
return new ExtendedPrimeExceptionHandler(getWrapped().getExceptionHandler());
}
private static class ExtendedPrimeExceptionHandler extends PrimeExceptionHandler {
public ExtendedPrimeExceptionHandler(ExceptionHandler wrapped) {
super(wrapped);
}
@Override
protected String evaluateErrorPage(@SuppressWarnings("null") Map<String, String> errorPages,
@Nullable Throwable rootCause) {
return ERROR_PAGE;
}
}
}