2017-02-15 20:14

@埋头苦干 用 model.find 或者 Db.find 去查询

2017-02-15 20:07

jfinal 建议对所有复合主键的表强制再指定一次复合主键的次序,确保一致性。复合主键的默认次序取决于反射得到的次序,jfinal 在开发这个功能的时候估计到未来可能出现次序不同的情况,你这次真的碰到了

2017-02-15 20:06

这种情况 jfinal 早有考虑,如果你加入了 jfinal 俱乐部,可以在 jfinal-club 项目中看到如下的代码:
ActiveRecordPlugin arp = new ActiveRecordPlugin(druidPlugin);
_MappingKit.mapping(arp);
// 强制指定复合主键的次序,避免不同的开发环境生成在 _MappingKit 中的复合主键次序不相同
arp.setPrimaryKey("document", "mainMenu, subMenu");
me.add(arp);

以上的 arp.setPrimaryKey(...) 这么代码,就是在 _MappingKit.mapping(...) 调用之后,再次强制指定复合主键的次序,这样就万无一失了

2017-02-15 17:01

在首页下载 jfinal demo,前端后端的分页都有具体的例子在这个 demo 之中,一看就懂了,如果想获取更有价值的专享资源,可以看一下俱乐部频道的介绍:http:jfinal.com/club

2017-02-15 16:49

第一次有这样从注册域名到上线项目的完整过程分享,并且项目也开源了,强烈建议有需要的朋友收藏一下该分享,感谢分享

2017-02-15 14:46

将输出到控制台的目录 copy 一下,然后在资源管理器的地址栏里面粘贴并回车就可以找到这些生成的文件了

2017-02-15 14:29

@天蓬小猪 先会使用,这也是一种很好的方式,理解会更深

2017-02-15 11:44

jfinal 以及 jfinal-club 俱乐部专享项目的代码讲解,在俱乐部成员再多些的时候会统一进行,仍然是俱乐部专享

2017-02-15 11:43

除了 jfinal template engine 这个模块涉及编译原理方面的算法,较为有难度以外,其她模块都很简单易读,只需具 java 基础知识即可。如果想看懂 template engine 模块,需要了解词法分析、语法分析、AST、语法分析等编译原理方面的知识

读源码最好的方式,是先了解项目的架构,先在心中有个宏观的认知,可以通过 jfinal 手册中的架构图去了解

在了解架构的基础之上,通过在关键代码处添加断点,进行调试便可了解程序大致的执行流程

在了解程序大致的执行流程以后,再分别在自己感兴趣的单个模块中的合适的地方设置断点,并进行单步调试,例可了解程序执行的所有细节

通过以上方式便可极为高效的了解 jfinal 源码,简单来说就是:了解架构 + 代码调试

仅仅去读代码,只是以静态的视角去了解内部,而程序运作却是动态的,所以让阅读方式从静态转变为动态是更加高效的方式

2017-02-14 15:11

improt 时,选择导入 maven 类型项目,或者去俱乐部专享群寻求帮助

2017-02-13 16:43

obj = null 这类操作要看情况,例如持有 obj 的对象本身可以被回收,那么 obj = null 这个赋值就不需要了

如果持有 obj 对象的对象不被回收,却又想回收这个 obj 属性,那么 obj = null 是有意义的

简单来说 JVM 只会回收“不可达”的对象

2017-02-13 13:12

目前还没有更好的名字,一个好名字,要先考虑对含义的表达,在这个基础之上再考虑简短,目前可以认为是这个名字:jfinal template

2017-02-13 13:11

@土龙 回复列表会考虑改变排序规则,各有利弊,再多权衡一下

2017-02-13 13:09

static 方法倾向于函数式编程,在面向对象开中一般用于工具类方法。弄成 static 不利于继承扩展,例如 model 中的方法都是可以在继承类中通过覆盖父类来扩展的

此外 static 方法中也无法通过 getClass() 拿到类型信息,也就无法实现 active record 模式中的很多功能

2017-02-12 18:29

public void configRoute(Routes me) {
me.setBaseViewPath("view");
}

即可打完收枪,具体可以参考一俱乐部提供的专享项目:jfinal-club