2020-11-20 15:05

submit方法不能私有声明哦!
在 Controller 之中定义的 public 方法称为Action。Action 是请求的最小单位。Action 方法必须在 Controller 中定义,且必须是 public 可见性。
先仔细读读文档,可以减少上手的时间https://jfinal.com/doc/3-2

2020-11-13 10:24

@704442497 如果是看返回值类型的话,可以加个判断跳过JsonRender类型就可以了,比如:if(inv.getController().getRender() instanceof JsonRender){return;} 就可以了

2020-11-13 10:12

可以看源码:
} catch (Throwable t) {
if (conn != null) try {conn.rollback();}
也就是说,异常肯定会被捕捉,并回滚的。 那就检查一下配置比如事务级别,以及数据库是否支持事务等等:
https://jfinal.com/doc/5-7
注意:MySql数据库表必须设置为InnoDB引擎时才支持事务,MyISAM并不支持事务。

推荐:断点不要打在事务里面容易超时,调试起来一脸懵逼。用日志输出看事务里面执行的情况。

2020-11-12 16:07

https://jfinal.com/doc/2-7
me.setActionHandler(MyActionHandler actionHandler)
MyActionHandler继承ActionHandler,复制handle代码出来改改就可以了。

2020-11-12 15:45

@或是的话 需要clear 掉那个“全局拦截器” ,那么它其他不能叫全局了,只能算是业务的一种了,我有JSON格式拦截器,就是有做拦截异常转为json返回的。 根据你说的业务,其实不要在 configRoute(Routes me) 这个位置配置就可以了, 拆为两个路由,一个有 你要的拦截器 一个没有就可以了。 如果有大量相同拦截器,可以对拦截器进行打包,或者抽取为同一个公共方法,还可以建base路由,很多方式

2020-11-12 14:26

image.png
我是拆开实现的,公共无权限》私有限制权限》数据格式规范校验路由》具体业务独立路由 等等组了一个包

2020-11-12 11:50

@andu Enjoy 模板代码生成器, 自己自定义的代码模板。 新加方法时也是快捷键复制再手动修改一下的,感觉看着还行,用起来挺舒服方便的

2020-11-11 18:00

我们后来开发的功能为了搜索方便,也是把路径直接写在了方法注释上面,方便搜索定位代码,确实很少从Routes定位代码

2020-11-07 15:52

@天朝子民 好建议,已更新文章内容,增加一个run方法

2020-11-07 14:58

@天朝子民 立即执行 其实就是 一个 Controller+Action方法去调用和任务器执行的同一段代码。一般代码拆分细的话,会有个Service业务代码,Controller和任务调度代码都执行调用Service代码即可。

2020-11-05 16:39

@HingLo 确实不是新鲜事,每次从Navicat复制SQL到代码中时,就带着库名,还得手动去掉2333,但是你是社区第一个分享这个操作的人~ 这就很赞了呀

2020-11-04 16:19

PS:master数据库登录的那个账户,也必须能操作slave 数据库权限,或者说登录的账户能操作这两个库的时候, 才可以使用库名前缀。

2020-10-28 10:36

DictKit.getName 里面写法和你的#dictionary Directive差不多,kit里面做下 EhCache缓存就很爽了

2020-10-28 10:31

#dictionary 是Enjoy后端执行的语法,{{d.orgId}}是laytpl前端浏览器执行的语法,两个东西执行的时空都不一样。咋取值。。。思路错了。
推荐在JF的DB执行查询结果之后,进行 for(x : list)x.set("orgName", DictKit.getName(x.get("orgId"))) 处理,
然后在浏览器laytpl里面使用{{d.orgName}} 这样子取值就很OK