2016-09-22 13:31

@zhaoweijing2003 @似水流言1 多多关注社区动态,文档频道功能已经做好,正在添加内容的阶段,前两章添加完后就正式开放了

2016-09-22 13:04

@本人纯属虚构 https 加上以后最大的顾虑就是访问速度会有所下降

2016-09-22 12:26

jfinal 有很多大型项目已经运行多年,例如 trafree.com ,每天千万级别的请求,去哪儿和淘宝旅行都用的他们的 API,12 台服务器做集群,性能非常好

有一个比较普遍的误解认为 jfinal 只适合做小型项目,其实 jfinal 更加适合做大型项目,只需要引入业务层就好,有这种误解可能是看到 jfinal demo 中没有业务层造成的。

现在炒得比较热的微服务,也即大型项目拆分成小型服务做分布式 + 集群的方式,这个其实在很多年前巨头公司都是这样做的,本质就是老祖宗说的分而治之,jfinal 作为一个 web + orm 框架,可以处于这些微服务之中,无论你多大的项目 jfinal 都可以用

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 ,写对它就好