2019-09-09 15:39

@山东小木 jfinal 俱乐部的角色、权限管理的设计是当前最简洁的,但功能却一点也不少

不仅如此,还引入了一键同步生成所有权限的功能,节省无数时间,减少出错可能

2019-09-09 15:36

@zxh166 你这么来测试一下:
String json = JsonKit.toJson(resMap);
System.out.println(json);
renderJson(json);

2019-09-09 15:28

调试与不调试显然是不会有区别的,可能是别的原因,例如在不调试的时候 action 其实是被重定向了之类的问题

细心多调试几次

2019-09-08 22:29

@快乐的蹦豆子 有个改进建议,返回值应该是不需要关注的,因为 inv.invoke() 这个方法内部已经处理好了返回值并且将返回值放入了 returnValue 变量之中

此外,如果上面的建议如果测试后有问题,也只需要改成只保留处理返回支持的那个 if 分去,因为无返回值的时候得到的是 null 值,而调用 inv.setReturnValue(future) 正好也是 null 值

记得验证后再回来分享一下

我前面的建议就是只留下面的代码:
cachedPool.submit(() -> {
inv.invoke();
});

万一有问题,只留下面的代码:
Future《Object》 future = cachedPool.submit(() -》 {
inv.invoke();
return ((Future《Object》) inv.getReturnValue()).get();
});
inv.setReturnValue(future);

2019-09-08 18:19

这里实现异步的意义是什么呢? 是为了尽快让客户端得到响应?

如果是为了让客户端尽快得到响应, inv.invoke() 后面应该还要添加一句:
inv.getController().renderNull();

因为在新原线程响应客户端以后, response 已经有 render 动作向其输出信息了,如果异步线程中再次对 response 输出信息会出问题

2019-09-08 16:10

因为 jfinal 默认并没有开启注入,需要配置一下才能使用 @Inject

2019-09-08 16:09

如果是在 controller 上使用的 @Before(Tx.class) 则用法完全一样

如果是更换 4.3 以后,又接着改了代码,在 controller 中用了 @Inject, 那么要配置一下:
me.setInjectDependency(true);

2019-09-08 16:08

@chcode 这个办法挺好,谢谢分享,赞

2019-09-08 16:07

所有版本在 tomcat 下运行的方法都是完全一样的:
https://www.jfinal.com/doc/1-7

这里要注意:在开发时如果用的 jetty-server 或者 jfinal-undertow,那么在打包之前需要先删掉这两个依赖

2019-09-08 16:06

信息不全,无法判断,看上去是 WARNING, 并不是真的有问题

2019-09-08 16:05

discussDetail 为 null 或者 为 false 时,后面的 discussDetail.focus 就不会被求值了

你碰到的情况,应该是 discussDetail != null 引起的

2019-09-07 12:59

在关键点打上断点,调试看程序动态走向

2019-09-06 17:40

@星空下无敌 应该有值,可能是你别的什么地方的代码将调用流程打乱了

2019-09-06 17:37

@minminmin 这部分代码是 cglib 生成的,这个工具可以在运行时生成 java 字节码

字节码所对应的对象之中本就存在这个方法,无需实例化方法,该方法已是类的一部分