2016-09-22 12:20

性能是 jfinal 极度关注的,对于性能 jfinal 做了太多的努力,随便举几个例子:
1:尽可能少地创建对象
2:尽可能少地执行代码,即尽可能少地调用方法也即尽可能短的调用栈
3:对热点代码重点优化,例如 Invocation 这个类
4:尽可能不使用java反射
5:在不可避免要使用反射时,在系统启动时一次性解决,例如 jfinal 的路由与action的映射关系是在系统启动时通过反射建立的,服务启动完成以后不再需要反射匹配路由的动作
6:极简设计,概念最少化,极薄封装,从架构上保障性能最大化

有用户与 SSH 做过性能测试对比,jfinal 性能是 SSH 的 4.56 倍,这里找到一个压力测试的贴子,可以看一下:https://www.oschina.net/news/90815/jfinal-3-3

2016-09-22 12:04

@本人纯属虚构 防止这个攻击需要使用 https,这个会逐步添加

2016-09-22 11:09

@小飞象 jfinal 2.3 考虑添加 getModels 以及 getBeans 支持一下

2016-09-22 10:59

InsertedRows[n] 这个相当于是 modelName,是在 getModel 或 getBean 时可以指定的一个前缀,这两个方法都支持传入第二个参数,如:getModel(Xxx.class, "yyy"),这里的第二个参数 yyy 就是在表单中的前缀 name="yyy.attName"

2016-09-22 10:58

@小飞象 InsertedRows[0][link]=add 改成 InsertedRows[0].link=add 即可

2016-09-22 10:50

这个是纯前端的问题了,与后端没有任何关系,只需要用 js 绑定该标签一个click事件即可,建议用 jquery :
$(document).ready(function() {
$(...).bind("click", function() {
...
}}):

2016-09-21 23:00

尽量使用 getModel 获取整个对象,如果要同时获取到 List 这样的数据,可以在 controller 中创建一个 getModels(...) 方法,大体思路如下:
List ret = new ArrayList();
for (int i=0; i < size; i++) {
Xxx xxx = getModel(Xxx.class, "xxx[" + i + "]"); // 循环获取多个model对象
ret.add(xxx);

简单说就是通过 jfinal 已经提供的 getModel,进行循环,获取多个,页面生成的 name 需要精心设计一下,上例中的 "xxx[" + i "]" 是在指定 modelName 前缀,每次循环前缀不同即可,页面中 input 的 name是这样的形式:
name="xxx[0]"
name="xxx[1]"
这样在后端的 for 循环中就可以动态拼接出前缀了,注意循环中的 size,可以是通过 getParaValues(...).lenght 得到,也可以在表单中单独用个变量传过来

2016-09-21 11:19

@lunarmans 确保拼接后是正确的 sql ,可以正常执行就可以了

2016-09-21 11:17

将日志级别由 debug 上调为 error

2016-09-21 11:17

clear() 方法是清掉 model 中所有的属性值,find() 查询的结果是一个List,而 findFirst() 结果是一个 Model,建议去首页先下载手册看看

此外,在 dao 这个对象之上,只能使用其 find 系列的方法,其它方法如set、put、clear、save、update 等等都不能使用,这个在手册中有红色字体进行说明,因为 dao 是 static 的,全局共享的,有线程安全问题

不建议在 model 中创建 dao 对象,容易误用

2016-09-21 09:40

@绿色的小苹果 必须是平滑升级

2016-09-20 17:05

@lunarmans 这个不是 paginate 自动生成的 sql 吧? 是你自己的 sql ,写对它就好

2016-09-20 16:24

新版本验证码在使用上更简洁,代码量从五行缩减到了两行

2016-09-20 12:31

@sphsyv 还请多多分享,这样社区的文化与氛围就慢慢形成了,社区还有几个重要功能上线以后,站长也会每天发布分享出来

2016-09-20 12:02

第一次分享 Hadoop Hbase 这样的插件,大数据时代必然的需求,超赞