2019-09-09 17:21

@Gevin 看一下 class path 下面有没有 MyConfig.class 文件,可能是自动编译没有打开

异常提示找不到这个 .class 文件,可能是真找不到,所以去看看现场:
target/classes 下面去看看

2019-09-09 17:14

@walking_ action 是最细粒度的存在,所以将所有动作的权限都与 action 建立起来以后问题都解决了

你前面提到的场景应该也可以在这个方案下去满足,你再多想想如何让其融入到当前的方案之下

2019-09-09 16:40

@walking_ 让界面中的每一个动作都对应后端的一个 action, 一一对应用统一管理起来,多看看 jfinal club 中的用法

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 这个办法挺好,谢谢分享,赞