2016-11-08 16:45

@charlox play 的源代码看过一些,基本没法看,看到将异常用于正常流程控制后,更加肯定该框架设计水平较低,此外用 play 开发项目光是 jar 包就一大堆,我记得还用了 JPA、Hibernate 之类的东东,更加没法看了

2016-11-08 13:22

play 的这个功能是正要极力批评的一个设计,因为 play 是通过在 render(...) 方法中使用抛出异常这种暴力的方式终止当前执行流程的,起码有两大坏处:
1:抛出异常严重拉低框架性能,异常的创建、初始化、抛出都是很费时的操作
2:异常用于正常流程是对异常的极度误用,建议看看《effective java》 这本经典的书,里面有非常深度的解读,异常只能用于不正常的流程

程序语言决定了,要终止一个正常执行中的 statement 语句序列,必须使用 return、continue、break、goto 等专用程序跳转控制机制才可以做到, throw 并非用于控制程序跳转机制

综上,jfinal 的 render 不会去支持直接跳出当前正常的 statement 执行流

2016-11-08 13:16

@java180 多写点代码,或者通过配置的方式,兼容下两种运行环境

2016-11-08 13:16

设置一下方言: arp.setDialect(new AnsiSqlDialect()) 即可

AnsiSqlDialect 这个方言支持所有遵守 ANSI SQL 标准的数据库,当然你也可以通过继承 Dialect 来扩展出 HiveDialect 专用方言

最后,生成 model 的生成器别忘了也要设置方言

2016-11-08 13:13

感谢分享,小程序越来越火了,jfinal 也会更火爆

2016-11-08 13:12

先做重要的功能,验证码增强的事情目前可以通过 class MyCaptchaRender extends Render 的方式自己先扩展出来,然后通过:
render(new MyCaptcharender()) 来使用

2016-11-07 21:19

@火星人 这个与你用的 json 转换工具的配置有关,通常转换工具可以配置日期转换的类型,建议用一下 jfinal 官方提供的 json 工具,这样用:
Json.getJson().toJson(user)

2016-11-07 17:49

up.getOriginalFileName() 是拿到上传文件原始文件名,一般没什么用

2016-11-07 17:49

补充一点,通过 getFile() 得到 UploadFile 这个对象以后,如果文件名重复,可以通过 uf.getFileName() 得到 jfinal 自动生成的新文件名,拿到这个文件名可以存数据库,便于读取

2016-11-07 17:47

没碰到过这种问题,建议多调试一下,记得解决以后回来再分享一下

2016-11-07 17:45

如果是不希望文件名重复,可以不必理会,因为 jfinal 会在文件名重复的时候自动去修改文件名,保障新文件不会覆盖掉旧文件

如果是希望更自由的改文件名,目前可以使用的方式除了 uploadFile.getFile().renameTo(...) 以外,还可以通过使用 OreillyCos.setFileRenamePolicy(...) 注入一个重命名实现类即可

2016-11-07 17:29

dp 与 arp 都未调用 start() 方法,必然是数据源也没启动、映射也没有被执行,这个在 jfinal 手册中有说明,当 active record plugin 用于非 web 项目时,需要手动调用 start() 方法

用于 web 项目时,该 start() 方法是 jfinal 帮你调用的

2016-11-07 17:27

在 YourJFinalConfig 中添加一个 public void afterJFinalStart() ,在这个方法里面添加上需要项目启动完毕后需要被执行的代码即可打完收工,jfinal 手册中有说明

2016-11-07 12:22

异常信息中全程没有 "jfinal" 出现,是怎么启动的