捕捉模板找不到的异常

在设计cms系统的时候,如果有自定义模板的时候,后台配置了模板地址的话,但是文件中模板不存在的话,需要给予提示,不能显示空白页面。

1.自定义 renderFactory接管

/**
 * @Description:
 * @Author: Robin Xia
 * @Date: Created on 2017/12/11
 */
public class CustomRenderFactory  extends RenderFactory {

    @Override
    public Render getRender(String view) {
        return new CustomRender(view);
    }

}

2.实现render方法,扑捉异常处理异常

/**
 * @Description:
 * @Author: Robin Xia
 * @Date: Created on 2017/12/11
 */
public class CustomRender  extends TemplateRender{


    public CustomRender(String view) {
        super(view);
    }

    @Override
    public void render() {
        response.setContentType(getContentType());
        Map<Object, Object> data = new HashMap<Object, Object>();
        for (Enumeration<String> attrs = request.getAttributeNames(); attrs.hasMoreElements();) {
            String attrName = attrs.nextElement();
            data.put(attrName, request.getAttribute(attrName));
        }

        try {
            OutputStream os = response.getOutputStream();
            Template template = null;
            try {
                template = RenderManager.me().getEngine().getTemplate(view);
                template.render(data, os);
            }catch (Exception e){
                Map<Object, Object> errorMap = new HashMap<Object, Object>();
                errorMap.put("message","未找到模板文件,路径为:" + view);
                String errorView = SystemConstant.TEMPLATES_COMMON_PATH + File.separator + SystemConstant.ERROR_PAGE;
                RenderManager.me().getEngine().getTemplate(errorView)
                        .render( errorMap, os);
            }
        }catch (Exception e) {
            throw new RenderException(e);
        }
    }


}

3.config配置一下

@Override
public void configConstant(Constants me) {
    me.setDevMode(p.getBoolean("devMode", false));
    me.setJsonFactory(MixedJsonFactory.me());
    me.setRenderFactory(new CustomRenderFactory());
}

4.配置一个错误页面,显示错误提示即可

评论区

xialinlin

2017-12-11 15:39

感谢波总的指导

JFinal

2017-12-11 16:04

实现简洁,感谢分享

CustomRenderFactory 中的两个 getErrorRender 建议去掉,会让其他人误以为是必须的,其实只需要 getRender 即可

xialinlin

2017-12-11 16:22

178397462

2017-12-19 16:32

有下载的吗 给分享一个

xialinlin

2017-12-19 18:22

@178397462 就这几个类,都列出来了

热门分享

扫码入社