博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
jfinal通过拦截器判断不同浏览器返回不同结果页面
阅读量:6994 次
发布时间:2019-06-27

本文共 1674 字,大约阅读时间需要 5 分钟。

  1. 目的

    前端做了两套页面,一套PC ,一套手机,我想通过程序控制返回的页面,而Controller不需要关心终端,只需要render固定的字符串。

  2. 思路方法

    拦截器拦截到render,然后修改viewpath

  3. 实现

    关键代码

/***系统常量类*/public class AppConst {    public static Routes SYSTEM_ROUTES = null ;}/***系统配置文件*/public class CmsConfig extends JFinalConfig {    public void configConstant(Constants constants) {        ConfigUtil.loadConfig(loadPropertyFile("application-test.properties", "application.properties", Const.DEFAULT_ENCODING));        constants.setBaseViewPath("/WEB-INF/page");    }        public void configInterceptor(Interceptors interceptors) {    interceptors.add(new RenderSwitchInterceptor());    }}/***路由配置*/public class WebRoute extends Routes {    @Override    public void config() {        add("/web/product",WebProductCtrl.class,"web/product");    }}/** * PC 与手机 页面自动切换 关键代码 * Created by YangTao on 2015-8-31. */public class RenderSwitchInterceptor implements Interceptor {    @Override    public void intercept(Invocation ai) {        Controller c = ai.getController();        ai.invoke();        //一定要注意,把处理放在invoke之后,因为放在之前的话,是会空指针的,不信你试        //一定要注意,把处理放在invoke之后,因为放在之前的话,是会空指针的,不信你试        //一定要注意,把处理放在invoke之后,因为放在之前的话,是会空指针的,不信你试        Render render = c.getRender();        String returnPath = render.getView(); // ctrl中render的字符串        String viewPath = "";        if (!returnPath.startsWith("/")){ // 如果不是以/开头,则说明不是页面的完整路径            viewPath = AppConst.SYSTEM_ROUTES.getViewPath(ai.getControllerKey());        }        if (isMobile(c.getRequest())){ //手机            viewPath = viewPath.replace("/web/","/wap/");        }        render.setView(viewPath+returnPath);    }  }    update:修改代码结构、加注释

转载于:https://my.oschina.net/wanily/blog/499694

你可能感兴趣的文章