2016-10-08 12:07

Validator 主要用于 POST 提交的表单请求,尤其是表单域多的请求。对于每一个字段的验证本质上就一行代码,如:validateInteger(...)

Validator 中可以获取 actionKey、controllerKey 等数据,所以可以将大量的验证写在同一个 Validator 中,然后用 actionKey 做一个统一的分发,不需要为每一个 action 写 Validator

再退一步,你可以利用 Validator 或 Interceptor 加载外部用于验证的配置文件,这就回退到了 SSH 时代

此外,假如是 GET 或者请求中的字段很少,直接在 action 中做个简单的判断 render 到特定的地方就好,不需要创建Validator

jfinal 的 Validator 有还有很多考虑,例如 API 引导式验证,你在敲入 validateString(...) 这类代码时如果出现手误 eclipse 会提示你,比 SSH 时代用 xml 配置验证要舒服很多,其它一些考虑在此就不赘述了

2016-10-07 15:57

设想一下,如果 model 没有主键,那么 model.save()、model.update() 怎么可能知道操作的是哪条数据表记录?

2016-10-07 15:56

jfinal 的 model 是 Active Record 设计模式,该模式的核心特征就是一条数据表记录唯一对应一个 model 对象,而该对应关系靠的就是主键,所以只要是使用该模式就必须有主键

如果确实没有主键值就不用映射该数据表,直接用一下 Db + Record 模式来操作这张表。最后,让生成器略过该表的方法是 generator.setExcludeTable(tableName)

2016-10-06 23:27

这个得用 String json = HttpKit.readData(getRequest());

2016-10-06 23:25

将来开源不? 以后有好的项目也多多分享出来,感谢支持

2016-10-06 21:00

@zjchxj 试过我建议的方法没? 是否可以解决?

2016-10-06 17:24

不知道楼主看过社区分享频道置顶文件没有,在这里:http://www.jfinal.com/share/1

jfinal 社区是一个专注于 jfinal 生态的站点,希望做一个专注的社区,所以这里面的项目、分享都是与 jfinal 有关的,其它的资源也不是不欢迎,只是这样做不符合社区的初心,希望你能发布生态圈内的项目,在本篇资源上改下内容就可以,非常抱歉

2016-10-06 10:58

@lyh061619 始终记得 jfinal 是通过监控 classes 目录下的文件变化来热加载就好,一切问题都明白了

2016-10-05 17:57

将这里 Field[] fields = ClassLoader.getSystemClassLoader() 改成如下试试:
Field[] fields = Thread.currentThread().getContextClassLoader()

应该是你的代码使用的是 system 的 classload,而 web 项目使用的是其它的 class load,造成里面加载的类文件不认为是同一个

2016-10-05 17:47

首先,这个特性叫热加载不叫热部署,仅用于开发阶段,java 做为静态语言,不建议玩热部署。其次 jfinal 的热加载是通过监视项目类路径 classes 下是否有文件发生变化再 restart 一下 webapp 来实现的

所以,修改配置文件需要导致 classes 下的文件发生改变才能触发热加载,否则,热加载就不会起作用

2016-10-04 20:57

在 "/login" 这个 actionKey 进入到的 action 中通过如下代码做个处理即可:
if (getRequest().getMethod().equals("GET")) {
跳到登录页面
} else {
跳到登录验证方法
}

当然,还可以通过拦截器实现,通过 inv.getController().getRequest().getMethod() 以后的处理逻辑与上面的相似

2016-10-03 22:46

以前想过添加,一直没有合适的名字,因为与 cache 相关的方法名有: findByCache、paginateByCache,所以缓存有关的都是在原有的方法名上添加 ByCache。进而可以得出 findById 的带 cache 的方法应该是 findByIdByCache 貌似不太好,而且 findByIdCache 也不太好

所以,这个方法就一直没有添加,而是建议开发者用一下:findFirstByCache 来顶一顶, findByIdFromCache(id) 这个设计与前面的 findByCache、paginateByCache 不成系列,所以没引入

2016-09-30 20:23

@happyboy 这个不同的数据库要做出不同的处理,先处理 mysql,判断有没有 limit ,有则不处理,无则在末尾添加 limit 1。当然,如果出了问题,用户可以通过扩展 MysqlDialect 来改变行为

2016-09-30 19:44

这个有很多 jfinal 用户都找我要过,现在终于有了,超赞的分享

2016-09-30 17:55

分享点代码出来哈