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-27 23:14

#(content) 即可

如果需要转义用一下 #escape(content)

2018-09-27 13:43

直接加,注意加在 JFinalFilter 之前,谁在前面谁先拦截

2018-09-25 14:03

jfinal 用的 cron4j 表达式只支持五个部分,你的表达式有 6 个部分,显然不支持,看下社区文档:
http://www.jfinal.com/doc/9-2

2018-09-25 14:01

tomcat 下部署 jfinal 参考这里:
https://my.oschina.net/jfinal/blog/353062

本质问题参考这里:
http://www.jfinal.com/doc/1-5

2018-09-25 14:00

感谢分享

2018-09-25 14:00

用一个全局拦截器,内部结构大致如下:

try {
inv.invoke();
}
catch(Exception e) {
inv.getController().renderJson(....);
}

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