2018-09-29 11:47

@APG jfinal 的 enjoy 引擎是与 Java 直接打通的,这个是 Java 界所有其它模板引擎都没有的设计

在 jfinal enjoy 看来,基于某一门语言,与某一门语言打交道的模板引擎,天然就需要与这门语言打通

2018-09-29 11:27

如果是 JDK 的工具类,里面的方法是 static 的,也可以这么来用:
#( java.util.Arrays::binarySearch(...) )

注意一下 binarySearch 中所使用的参数的类型与个数要是正确的,否则会报方法找不到的异常

2018-09-29 11:23

这个 Arrays 从哪里来的? 有没有添加为 shared object,例如:
arp.getEngine().addSharedObject("Arrays", new Arrays());

2018-09-28 18:17

@fox 不要着急,这个是一定可以的,这个用了很多年的拦截器了,你是不是在这个 action 中使用 @Clear 做了拦截器清除?

2018-09-28 18:10

@不能忍受 两行代码即可:
String xml = renderToString("books.xml");
String ret = HttpKit.post(url, xml);

2018-09-28 18:09

@fox setSessionAttr("user", userVO); 是一定生效了的,这个时候你的 session 还是 null 值,只有两种可能:
1:修改没有生效,例如自动编译没打开,现在启动用的代码本质还是以前的老代码
2:你的客户端不支持 cookie,因为 session 是依赖于浏览器的 cookie 的

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

感谢分享