2016-10-11 16:01

@innerac 看具体场景,例如,你要用的这个功能本身就需要先启动一个服务,打开了监听端口之类这样才能工作,那就是要开启服务,如果只是使用 spring 的一些常规 API就不需要开服务,例如 factory.getBean(name) 这种从 spring 中获取 bean 是不需要开启服务的

2016-10-11 15:41

@innerac 理论上来说在 jfinal 中使用第三方,直接用就好,不一定要有一个集成的动作

2016-10-11 15:33

在 YourJFinalConfig 中创建一个 public void afterJFinalStart() 方法,在这里启动 Spring,然后就可以直接使用 spring 了

2016-10-11 13:04

@xRhbN 手册才 30 多页,而且大部分是代码示例,极其少量的文字,一个小时内能看完,所以一定要仔细看完,节省很多时间,很划算

Db.tx(...) 更好控制,return false 的时候可以控制回滚

2016-10-11 12:13

@xRhbN 我习惯于在业务层用 Db.tx(...) 来做事务,对动态语言熟悉的开发者会喜欢这种用法

2016-10-11 10:17

@FS心情 本来已经上了的,最近有个比较好的创新在做,根本停不下来,所以这个新开页面优先级调了一下

灵感和创新是很微妙的,稍纵即逝,所以来的时候,一定要先抓住

2016-10-10 21:59

@nbjgl jfinal 尽量做一些通用的功能,你感觉做的那些重复的事情,其实可以自己扩展一下,很容易,只要两步就好:
1:做一个 MyModel 继承 Model,在这个 MyModel 中实现自己需要的扩展功能
2:做一个 MyBaseModel 继承 BaseModelGenerator,覆盖掉父类中的 genClassDefine() 这个方法,将原来生成器生成的的 extends Model 改为 extends MyModel 即可让你所有的最终 model 拥有这些扩展的功能

2016-10-10 21:56

是最好的 jfinal 极速开发者社区这是肯定的,力争成为更加好的技术型社区,感谢你的支持,jfinal 将会有极其好用的功能要上,多多关注社区

2016-10-10 21:54

其实吧,这个 2066 是手动改的,因为现在左侧文章列表的排序是按时间倒序排的,懒得做置顶功能,所以改下这个时间就可以让官方的两篇文章置顶了

右侧的热门列表是根据最近点击量排序的

2016-10-10 21:01

@nbjgl jfinal 是极简设计,所以有一定的取舍

2016-10-10 15:32

将 Controller 的路由改一下,不要与被前面那个 Handler 所阻止,或者在 Handler 中对个别模式的 url 进行判断,放行一部分,要根据需求灵活运用

2016-10-10 15:31

对于常用的数据库操作功能所使用的 sql 都有封装,例如 model.save()、model.update() 、model.delete()、model.findById(idValue) 等等

由于查询可能是千变万化、个性化的,所以为用户留下了传入 sql 的接口,例如这种 sql,jfinal 就完全不知道你会这么用,也不可能替你封装: find("select a.x, a.y, b.z, c.* from ta as a inner join tb as b on a.id=b.aid right join tc as c on b.cid = c.id where a.x =? and b.z =?", ...)

2016-10-10 15:26

从代码外观上看,是在使用业务层 AOP,所以需要使用 Enhancer.enhance(...) 或者 Duang.duang(...) 先将业务层增强,然后拦截器才会被触发,建议再仔细看一下 jfinal 手册,专门讲了这个问题,控制层的拦截器是自动触发的,与业务层不同

2016-10-10 15:24

这里有个相同的问答,http://www.jfinal.com/feedback/376
可以直接改一下 sql 语句,避免针对于 user 表使用 select *

2016-10-10 11:48

仿照 com.jfinal.ext.handler.UrlSkipHandler 过滤掉不希望被访问到的路径,核心代码如下:
void handle(target, req, res, isHandled) {
if (target.startsWith("/upload") {
HandlerKit.renderError404(req, res, isHandled);
} else {
next.handle(target, request, response, isHandled);
}