2018-06-11 18:15

NoClassDefFoundError 是由于你 maven 下载 jar 包到本地时出现错误

删除本地 maven 库中的 zxing 相关的那个目录,让 maven 重新下载一次这个 zxing

2018-06-11 15:10

关于 jfinal 打成 jar 的问题,可以参考下面:
http://www.jfinal.com/share/786
http://www.jfinal.com/share/422
http://www.jfinal.com/share/860

先确保打成的 jar 包可以使用,然后再制做 exe

2018-06-11 15:08

先确保打成 jar 包以后,通过 java -jar projectName.jar 运行起来以后,可以正常访问

然后再制做成 exe 文件

注意,如果如果希望模板打包在 jar 包中可以访问,需要配置一下:
engine.setSourceFactory(new ClassPathSourceFactory());

上面的配置,需要你在开发的时候就将模板放在 src/main/resources 下面,而不能放在 webapp 下面

2018-06-11 15:05

如果分布式事务代码会比较难看,性能也会有较大损失

等以后有优雅的设计时再加

建议在 jfinal 底层使用第三方中间件来支持,例如 sharding jdbc,对于开发者来说是透明的

2018-06-11 15:03

jfinal enjoy 中的大于、小于号只可能出现在表达式中,也就是说一定会被小括号所包裹。 因此,也就没有了使用 gt lt 的必要

freemarker 这类需要 gt lt 的支持,是因为他的表达式不一定在小手号内,所以会与 html 中的标签产生冲突,造成解析错误或者排版问题

无论是什么情况,gt、lt 这个设计都不是个好设计

2018-06-11 15:02

@aqiang 很可能是你的数据库表中的 uuid 字段前后有不可见字符,先删掉这个 uuid 字段,然后再重新创建一次即可,注意重新创建的时候用手工输入的方式,不要从别的地方 copy

这种事情历史上曾经发生过,最后发现是从别处 copy 来的字段名之后紧随了一个不可见字符,造成了肉眼上看字段存在,但实际不存在

2018-06-11 12:26

起码得两三个月以后了,好多更重要的事情要优先:
jfinal 3.5
jfinal club 1.5
jfinal admin 1.0
jfinal cms 1.0
jfinal 俱乐部的直播系列

2018-06-10 17:38

@maxwade 关键还是得看应用场景,如果做事务的地方非常多,用 @Before(Tx.class) 配全拦截器会更省代码,类似于放在公网上的互联网项目做事务的地方少用 Db.tx 会很方便

2018-06-10 16:26

Db.tx 在 Java 8 使用 lambda 表达式会很优雅,代码很省,例如:
Db.tx(() -> {
这个区域是被事务包裹的地方
return true; // 返回true则提交事务,否则回滚事务
});

2018-06-10 16:24

jfinal club 中只对需要的地方添加了事务处理,我个人习惯于使用 Db.tx(...) 来做事务

在项目中搜索一下 Db.tx 就可以搜得到这些地方

此外,如果你要使用 @Before(Tx.class) 来做事务,通常需要添加一个全局拦截器,拦截 @Before(Tx.class) 抛出的异常,然后根据异常的类型来决定 render(...) 到什么地方,或者 renderJson(...) 什么内容

如果你的项目中有很多地方要使用事务,使用 @Before(Tx.class) 再配合一个全局拦截器会比较方便,否则使用 Db.tx 会更方便

2018-06-10 11:35

@haojay 内容类型转换这个功能不好做,jfinal 社区的文章内容各自有 table 来存,没有改类型这个字段,需要新建 article ,并新建回复,还有 remind、refer 等关联,很麻烦

2018-06-10 09:35

CaseInsensitiveContainerFactory 这个一般不建议使用,程序还是严格点更好

如果一定要使用 CaseInsensitiveContainerFactory,也一定不要使用构造方法的参数,例如你上面使用时传入了 true 作为参数,这个会自动转换成小写

如果传入 false 会自动转成大写,如果不传则不转换

2018-06-09 20:36

@i++ Db.tx 内部已经 try catch 过了,在得到异常时会 rollback 回滚

你展示的这种情况是嵌套事务,也就是说在 Db.tx 外层还有 Db.tx 或者还有 @Before(Tx.class)。 这种情况当然不会回滚,因为这种情况是等着最外层的事务去回滚的

你去掉 Db.tx 外层的事务,就可以正确回滚了,不管外面是不是有 try catch 都可以

2018-06-09 20:21

@373118970 我不想将文档中的基础内容复制在这里

2018-06-09 17:58

getPara() 底层是从 Controller 中的 HttpServletRequest request 属性对象中获取值

但是这个 HttpServletRequest request 的作用域是当前请求,也就是说当前请求(主线程)在执行完毕后会回收或者销毁这个 request 对象

当你新创建的另一个线程去读取 request 对象中的数据时,必然是错误的

简单来说,将 controller 或者 request 对象传入另一个线程,一定是错误的,因为这两类对象的作用域是 “当前请求”,当前请求交互结束,对象生命周期立即结束

所以你在新创建的线程中是在使用一个无用的对象

正确的作法是先使用 getPara() 获取该获取的参数,然后传递给新创建的线程