2018-09-28 16:25
@fox 你先用 #(session ?? "session 为null") 输出一下,看一看 session 是不是为 null,这样就能确定 user 不存在了
如果 session 本身为 null,估计是你的自动编译没有打开,代码改了没生效而已
2018-09-28 00:29
@fox 上面回复的重点强调一下,在添加全局拦截器的时候为 SessionInViewInterceptor 构造方法添加一个 true 参数:
me.add(new SessionInViewInterceptor(true));
2018-09-28 00:28
@fox 为了提升性能,jfinal 默认并不会创建 session 对象,除非你的项目中明确用到了 session,例如用到了类似于下面的方法:
setSession(...);
getSession(true);
getRequest().getSession(true);
否则,需要为 SessionInViewInterceptor 拦截器指定一个默认创建 session 的参数:
me.add(new SessionInViewInterceptor(true));
不添加这个参数也可以,但在 enjoy 中的使用需要改成下面:
#(session.user.userId ??)
也就是说添加一个双问号操作符,这个操作符的具体作用看一下文档
2018-09-22 17:45
@fox 有很多改进,但用法几乎没有变化,这里是 chnagelog:
http://www.jfinal.com/share/847
升级的话,三分钟内可以搞定:
http://www.jfinal.com/doc/14-1
注意看,3.3 升到 3.4只需要注意下面三点:
1:IStringSource 更名为 ISource
2:指令扩展中的 java.io.Writer 改为com.jfinal.template.io.Writer
3:configConstant(Constants me) 中指定日期型数据转换格式 me.setJsonDatePattern(...)
2018-09-22 11:41
@fox jfinal 3.4 才有 engine. setToClassPathSourceFactory(...) 方法,你用的是 jfinal 3.3,用下面这个方法是同样的功能:
engine. setSourceFactory(new ClassPathSourceFactory())
此外,jfinal 3.4 默认已经可以不用配置 setBaseTemplatePath(...),可以直接用:
engine.getTemplate("D:/myproject/view/xxx.html");
也可以这样用:
engine.getTemplate("/var/myproject/view/xxx.html");
还可以试一试:
engine.getTemplate("myproject/view/xxx.html");
总之是去除了 null 值的影响
2018-09-22 11:38
@kingwin 局部刷新是纯前端问题,与 jfinal 这端是完全无关的, jfinal 处在服务端,只负责发数据给客户端,至于客户端怎么使用这批数据,在后端是没办法干预的
前端局部刷新有很多办法,例如 ajax 局部更新、pjax 局部更新、iframe 等等
2018-09-22 11:02
@小徐同学 setJsonDatePattern 目前只针对 java.sql.Date、java.util.Date 类型做转换,java.sql.Timestamp 用的那个最长的 pattern