jfinal通过拦截器判断不同浏览器返回不同结果页面

  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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值