前两天一个项目要实现换肤(管理员在后台换肤,不是登录用户自己换)功能,系统在用户登陆时已经查询了目前管理员设定的风格代码(其实就是css的目录名),并且放在cookie中,想着所有页面都可以使用#()输出cookie中的风格代码来拼接成风格css的路径,结果发现enjoy模板的输出指令#()不能正常获取cookie的内容,发了求助贴,得到@JFinal 的帮助(http://www.jfinal.com/feedback/2463),很容易就实现了:
新建一个Interceptor:
public class CookieInViewInterceptor implements Interceptor{
@Override
public void intercept(Invocation inv) {
Controller c = inv.getController();
//从cookie中取出属性值,放到当前Controller的request
//其实这里可以把cookie中所有的内容放到map里面然后放入Controller的request,只是我只需要styleCode
c.setAttr("styleCode", c.getCookie("styleCode", "default"));
inv.invoke();
}
}
然后在JfinalConfig中加入全局拦截器:
public void configInterceptor(Interceptors me) {
// TODO Auto-generated method stub
me.add(new CookieInViewInterceptor());
}