2016-09-03 21:10

我现在对大家有一个建议:果断删掉 model 中定义的那个 dao 对象,不要再这样用了

2016-09-03 21:09

当一个对象用了 static 修饰,变成了全局共享变量,就必须要注意线程安全问题,而 dao 中的查询方法获取到的数据全部是 new 出来的,所以是线程安全的。

由于一些 jfinal 用户还没有掌握基本的线程安全知识,所以 jfinal 官方在未来出的任何 demo 也好,开源项目也好,都会完全删除 Model 中的 dao 对象,让你没法再犯这个错误

2016-09-03 21:07

@java180 手册 5.3 中的例子,User.dao 后面紧跟的是一个查询方法,而不是 set、update、save 方法。原因是 dao 对象是 static 修饰过的,那么地方面使用 User.dao.save()、update()、set() 之类的方法时,都是共享的这一个 dao 对象,假如线程 A 往里面 set 一个值进去,线程 B 再 save() 或者 update()这样数据就乱套了,这个是最基本的 java 线程安全问题

2016-09-02 20:20

@不懂程序 换成 DruidPlugin,不要再使用 C3p0Plugin。此外,打印 DEBUG 级别的日志是配置问题,下载 jfinal demo ,直接且里面的 log4j.proerties 文件即可

2016-09-02 13:59

没有内置,我前面所说的:“_patinate.html 所使用的 css 文件“ 是指 jfinal demo 项目中的 WebRoot 目录下 css 子目录下的 manage.css 文件

2016-09-02 13:47

如果只改样式,只需要改下 _patinate.html 所使用的 css 文件

2016-09-02 13:34

通常这是前端的事,如果你是全栈开发者也可以自己做

2016-09-02 13:33

修改 _paginate.html 以及相关的 css 文件即可

2016-09-02 12:45

oracle 之下如果出现异常,建议设置不生成字典文件,由于没有测试环境 oracle 下的字典文件测试做得不够充分

2016-09-02 12:12

对于 model 来说,只要在 arp.addMapping(...) 一次性搞定,在使用过程中不再需要处理,而 Db.find/query 由于没有建立 table 的 meta 映射,所以,需要在使用过程中临时指定

2016-09-02 12:10

@java180 再补充一句:无论是 model 还是 Db,当主键名称为 "id" 时就不需要指定了,在没有指定 idName 时,jfinal 会使用默认的名称 "id",这个默认名称还可以在 Dialect 中可以自己指定

2016-09-02 11:54

@java180 其实我的第一个回复已经说过了,model 主键要使用 arp.addMapping(...) 的第二个参数指定 idName,Db 的相关方法需要临时指定 idName。
此外, dao 的 update() 绝对不可以去调用它,这个在手册中强调过,dao 是全局共享的,只能用于查询

2016-09-02 11:07

@java180 调试一下,看 update() 的时候,主键所对应的值是不是为 null? 没有值的时候才会报这个异常,你是不是在取值的时候没有取主键值?

2016-09-02 10:43

@java180 感谢支持社区发展

2016-09-02 10:43

@java180 多多关注社区动态,社区会一直有好用的功能添加