2019-09-09 16:17

@zxh166 这个问题无法解释,你用别的数据试试看:
map.put("msg", "ok");
renderJson(map);

2019-09-09 15:57

@zxh166 到底是什么错误? 你的提问中并未明确说明是什么错误

此外,用一用 renderJson("flag", 1);

注意 "1" 与 1 是不同的,前者是字符串

2019-09-09 15:40

@zxh166 jfinal 2.2 版本太老了,但用法还是一样的, renderJson 这个方法很早就有了,打断点单步调试一定可以解决的,调试进入 JsonRender.java 内部去

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 引起的