enjoy模板的输出指令#()可以输出cookie里面的内容吗?

我试了下好像不支持输出cookie中已存在的内容,是不是我是用方式不对还是配置不对?

评论区

JFinal

2017-11-10 16:45

页面中读取 cookie 建议直接用 javascript 的 api

如果要用 enjoy 读取 cookie 的内容,需要自己写点代码扩展, enjoy 被设计成可以在非 web 环境下使用,所以不能与 servlet 耦合,就没有支持直接读取 cookie

参考 me.add(new SessionInViewInterceptor()) 的做法,添加这个拦截器以后可以在页面用 #(session.value) 来读取 session 中的内容。 cookie 的处理也可以类似

JFinal

2017-11-10 16:47

可以写个拦截器,将所有 cookie 保存在一个 map中,然后在 enjoy 中读,例如:
public class CookieInViewInterceptor implements Interceptor {
public void intercept(Invocation inv) {
这里用一个 map 来封装所有 cookie,假定为key 为 cookie
inv.getController().setAttr("cookie", cookieMap);
inv.invoke();
}
}

芦苇

2017-11-10 17:02

好的好的,十分感谢

芦苇

2017-11-10 17:14

已经成功搞定,很方便,哈哈

JFinal

2017-11-10 17:20

@芦苇 具体代码分享出来啊,在这里贴下代码,说不定很多人需要:jfinal.com/share

芦苇

2017-11-14 15:52

@JFinal 好的,我整理下

芦苇

2017-11-14 15:55

新建一个Interceptor:

public class CookieInViewInterceptor implements Interceptor{

@Override
public void intercept(Invocation inv) {
Controller c = inv.getController();
//从cookie中取出属性值,放到当前Controller的request
c.setAttr("styleCode", c.getCookie("styleCode", "default"));
inv.invoke();
}

}
然后在JfinalConfig中加入全局拦截器:
public void configInterceptor(Interceptors me) {
// TODO Auto-generated method stub
me.add(new CookieInViewInterceptor());
}

芦苇

2017-11-14 15:57

我是做的换肤功能,当前使用的风格代码(css目录名)存在cookie中,每次页面渲染时使用#()去生成css路径用的

热门反馈

扫码入社