2020-11-13 17:03

@车仔2020 开发者不小心的这种情况碰到过很多次,常见

2020-11-13 12:21

@加洲旅馆2012 现在官方给出的 jfinal undertow 打包脚本 package.xml 中已经添加了针对 非 maven 库依赖的配置:
<!-- 项目 lib 目录下的本地 jar 包全部 copy 到 lib 目录下 -->
<fileSet>
<directory>${basedir}/lib</directory>
<outputDirectory>lib</outputDirectory>
</fileSet >

上面的例子可以在首页下载 jfinal_demo_for_maven 获取

上面的例子给出的是 copy lib 目录下面的 jar 包, 你可以配置成其它路径 copy 任意地点的 jar 包

2020-11-13 12:15

简单来记就一句: 如果最终 return true 执行完毕才提交事务, 其它情况都会回滚(异常/return false)

2020-11-13 12:13

@杜福忠 同学讲的最详细

关键点:
1:有异常会被回滚(注意自己不要吃掉异常,要让异常向外抛出)
2:自己 try catch 异常的时候,注意在 catch 中 return false
3:return false 会回滚
4:如果上面的都满足,还是没回滚。 应该是事务级别太低了,通过 ar.setTransactionLevel(int) 配置一下, 一般设置为 4 就可以了, 设置成 8 性能会很低

最后我还碰到过一种情况,开发者自己不小心,其实提交的数据是上次调试就已经提交的,程序实际上没问题

2020-11-13 12:01

@fred 记得搞定后回来分享一下,贴出代码,简单介绍就可以了

这个需求确实有用

2020-11-13 11:29

@北流家园网 这个是带泛型的,如果被存放的数据需要类型,这个比没有类型的会好

2020-11-12 19:06

@路遥_美好人生 为了避免与 Kv 重名,这个类可以改为 Tkv , 表示 typed key value

2020-11-12 18:04

@路遥_美好人生 HashMap 的用法不简洁,不支持链式调用,Kv 用着多爽

2020-11-12 17:31

适用于对类型有要求的场景,赞一个

2020-11-12 16:56

@天眼 刚刚开源的项目,代码很新,难免有点小 bug

2020-11-12 16:39

刚刚帮你在 qq 上解决了,原因是: 刚刚原因是maven本地目录的jfinal-undertow 2.2有问题, 删除下后重新maven install 好了

2020-11-12 16:33

gitee 上 star 和 fork 了一份,以后有同学需要的时候直接给这个方案

2020-11-12 16:32

看了一下源码,非常简洁干静,一个类就搞定了, 谢谢分享, 赞

我也收藏一份

2020-11-12 16:31

@杜福忠 同学的方向是最好的, 在 configHandler 中可以配置 ActionHandler :
me.setActionHandler(...)

你只需要拿到 jfinal 默认的 ActionHandler, 继承一下它, 然后覆盖掉父类的 handler 方法, 然后将父类 handle 方法中的内容照抄,再加上自己的 ip 输出就可以了

注意,有几处地方输出了 404 Action Not Found, 都要处理一下

2020-11-12 16:02

@或是的话 我再补充一下,有些情况可能比你现在的需求更复杂,除了用 @Clear 适当清除以外

还要以在拦截器内部去控制,例如下面这样:
pubic MyInter implements Interceptor {
// 用于排除指定的 controllerPath 不拦截
Set《String》excludeControllerPathSet = new HashSet();

// 初始化。可以通过外部配置文件来初始化,或者读数据库 初始化
static {
excludeControllerPathSet.add("/xxx");
excludeControllerPathSet.add("/yyy");
...
}

public void intercept(Invocation inv) {
// 被排除的 controllerPath 不拦截,直接调用 invoke() 放行
if (excludeControllerPathSet.contains(inv.getControllerPath()) {
inv.invoke();
return ;
}

// 这里放上拦截逻辑
....
}
}