JFinal自定义错误页面的另一种实现:全局拦截器

需求是:在错误页面输出当前url

1、创建拦截器

import com.jfinal.aop.Interceptor;
import com.jfinal.aop.Invocation;
import com.jfinal.core.ActionException;

public class ErrorPageInterceptor implements Interceptor {

    public void intercept(Invocation inv) {
        try {
            inv.invoke();
        } catch (ActionException e) {
            inv.getController().setAttr("actionKey", inv.getActionKey());
            int errorCode = e.getErrorCode();
            if (errorCode == 404 || errorCode == 500) {
                inv.getController().render("/_view/common/" + errorCode + ".html");
            } else {
                inv.getController().render("/_view/common/error.html");
            }
        }
    }

}

2、在项目配置xxConfig中添加此拦截器

public void configInterceptor(Interceptors me) {
    me.add(new ErrorPageInterceptor());
}

3、在错误页面的模板404.html文件中使用#(actionKey)输出当前页面的url


感谢波总提供的思路

顺问还有没有更简洁的实现方法?

评论区

JFinal

2019-05-28 10:53

目前最简洁的实现方式,比扩展 RenderFactory 要方便得多,超赞

听风道长

2019-06-03 17:50

/aa/aa,aa都不存在的时候,这种情况下貌似拦截不到
六月 03, 2019 5:46:20 下午 com.jfinal.core.ActionHandler warn
警告: 404 Action Not Found: /aa/aa

zeroabc

2019-06-27 16:32

对阿,Handler 的级别比Interceptor 高