Jfinal Constants 的set 404 和 500 view能否改进为支持Render作为参数

绝望的八皮 发布于 2013/04/29 13:56
阅读 799
收藏 3

在目前我们项目里面默认的404和500 页面设置方式满足不了需求。因为会根据不同的情况到不同的404和500页面。所以我们建了一个同名的class来重写。。贴一点代码。

逻辑就是我们网站为其他的站点提供页面,各自会有各自的样式,所以404不同一样,另外我们自己的站点还有国际化所以不同语言环境也不一样。。而对外提供的没有国际化。所以这个404里面会有逻辑判断。

if (Constans.THIRD_WEB.contains(accessId))
            view = "/" + accessId + "/404.ftl";
        else
            view = I18NKit.changePath(view);
        // render with view
        if (view != null) {
            render = RenderFactory.me().getRender(view);
            render.setContext(request, response);
            render.render();
            return;
        }
jfinal 目前的配置方式
@Override
    public void configConstant(Constants me) {
        me.setError404View("error404View");
        me.setError500View("error500View");
    }
这是我在JFinal-Ext中设计的一个统一异常处理的Interceptor,我就让view能支持Render参数,不知道JFinal觉得这样的建议如何,让JFinal也支持一下~~
@Override
    public void configInterceptor(Interceptors me) {
        ExceptionInterceptor interceptor = new ExceptionInterceptor();
        interceptor.addMapping(IllegalArgumentException.class, "/exceptions/a.html");
        interceptor.addMapping(IllegalStateException.class, new ErrorRender());
        interceptor.setDefault("/500.html");
        me.add(interceptor);
    }
加载中
1
JFinal
JFinal

JFinal 1.4 提供了一个 IErrorRenderFactory,便于在异常发生时灵活生成可定制的Render,对于你的具体需求,大致的代码是这样的:

// 创建 MyErrorRender
public class MyErrorRender extends ErrorRender {
  public MyErrorRender(int errorCode, String view) {
    super(errorCode, view);
  }

  public String getView() { // 覆盖父类 getView()
    if (errorCode == 404) {
      String accessId = request.getParameter("accessId");
      if (Constans.THIRD_WEB.contains(accessId))
         view = "/" + accessId + "/404.ftl";
    }
    else if(errorCode == 500) {
      if (Constans.THIRD_WEB.contains(accessId))
         view = "/" + accessId + "/500.ftl";
    }
    return view;
  }
}

// 在 YourJFinalConfig 设置 IErrorRenderFactory
me.setErrorRenderFactory(new IErrorRenderFactory(){
 public Render getRender(int errorCode, String view) {
    return new MyErrorRender(errorCode, view);
  }
});
0
JFinal
JFinal
    JFinal 1.4 明天发布,采用了全新的设计解决你的问题 
0
南湖船老大
南湖船老大

引用来自“JFinal”的答案

    JFinal 1.4 明天发布,采用了全新的设计解决你的问题 
V5
0
紫电清霜
紫电清霜

引用来自“JFinal”的答案

    JFinal 1.4 明天发布,采用了全新的设计解决你的问题 
好啊,期待!
0
JFinal
JFinal

引用来自“紫电清霜”的答案

引用来自“JFinal”的答案

    JFinal 1.4 明天发布,采用了全新的设计解决你的问题 
好啊,期待!
明天一早新版发布,沙发开抢 
JFinal
JFinal
回复 @飞翔的猴子 : 平滑升级,不用担心
木川瓦兹
木川瓦兹
额,正用1.3做到一半……
0
0
javaer
javaer
@ 绝望的八皮  -----异常拦截器。。不错。。
绝望的八皮
绝望的八皮
欢迎使用和提出改进意见
返回顶部
顶部