2017-09-07 15:23

@doocal 这也就是我前面所说的,由于 spring 的类层次太深,可扩展方法彼此之间的关联与规则繁杂,造成了扩展困难

所以,你花了很长时间才知道是通过 loadView 来实现这个 setOrder(...) 配合所实现的混合 view 功能

这个功能会考虑做到 jfinal 3.3 之中

2017-09-07 15:20

batchSave 方法会以第一条数据为蓝本生成一个 sql , 而这个 sql 是后续所有数据都共同依赖的

我猜测是你的 List 中的第一个 record 少一个字段,而后续的 record 需要这个字段,确保一下第一个 record 对象能够做为蓝本就可以

这个是由 jdbc 的 batch 机制决定的,batch 需要共享一条 sql,然后所有数据直接 addBatch 进来,一次性提交,以此来提升效率,所以你必须保证生成的这条 sql 是正确的,即:保证 list 中第一个 record 生成的 sql 是可共享的

2017-09-07 12:13

关闭浏览器仅仅可以触发 setCookie(key, value, -1) 这样设置的 cookie,注意第三个参数是 -1 才可以

而这仅仅是在浏览器端的行为,与服务器端完全无关,服务器端本质上没有 cookie,有的只有 session 表中的数据,要触发 session 表中数据的删除,需要点退出登录按钮

如果没有点击退出按钮,那么 session 表中的数据是一直在的,但用户在浏览器中的 cookie 没有了(前提是登录时没有点选保持登录状态),所以需要重新登录(没能点选保持登录状态的前提下)

session 表中的数据是有过期时间字段的,可以利用定时器定时清掉过期的数据

2017-09-06 16:56

启动的时候,在控制台会输出当前的版本号,just do it

2017-09-06 16:54

@①① 最简单的办法是用问号挂参: /files?fileName=test.docx

还有就是可以利用一个 Handler 做个转换,具体可以参考一下 FakeStaticHandler 源码

2017-09-06 13:58

根据下面的异常:
at com.jfinal.plugin.activerecord.TableBuilder.build(TableBuilder.java:50)

找到你在用的 jfinal 版本的 TableBuilder.java 的第 50 行代码,分析哪个对象可能是 null,然后一直反推

2017-09-06 13:15

解决空指针的问题,没有什么好的办法,老老实实单步调试,找到那个值为 null 的对象,然后让它不为 null 立即就解决了

2017-09-06 13:14

将 JVM 的启动时内存参数调大点,而且保障一下存入 ehcache 的数据大小是合理的,即便 JVM 内存调得再大,如果对内容的使用不得当,迟早也要 OutOfMemeory

2017-09-06 13:13

jfinal 路由规则,自打六年前第一个版本以来,就没有变动过,一定是可以的,只要认真看一下 jfinal 手册有关路由规则的那张小表格即可

jfinal 路由规则很少,只有四种路由,看一下小表格

2017-09-06 13:11

很重要一点: jfinal 的 sql 管理功能,并没有发明任何超出 sql + para 的事情,只要大家保障了最终生成的 SqlPara 中的sql + para 是能被 JDBC 所执行,sql 管理功能的事情就完成了

2017-09-06 13:09

将 #(...) 改为 #para(...) 的用法即可,前者仅仅是将参数直接输出为 sql 内容本身,后者仅仅是生成一个 '?" 问号占位,而参数生成在了另一个 paraList 之中

jfinal 的 sql 管理本质上就做了一件事情:利用模板引擎生成 sql 语句,并将问号占位的参数统一放入一个 list,sql 与 参数被封装在了 SqlPara 对象之中

SqlPara 中存放的 sql + paras,转交给 JDBC 执行就完事了

2017-09-06 13:05

开发模式不同,各有各的好处。 jfinal 暂时不考虑添加 @Async

2017-09-06 13:03

这个实现很简洁, 不知道用在项目中是个什么样子,有例子没?

2017-09-05 20:56

收藏点赞,感谢分享

另外,类名我建议改成 Jetty9Server,区分版本更好