2016-12-01 18:15
这件事情的学名叫:mass assignment,是任何框架都存在的事情,即便你用Spring、struts开发,或者用 ruby 语言的 rails框架开发也一样要处理这件事,开发者自己需要处理好,因为web 框架处于后端,在框架层面无法预测你前端页面传过来的哪些字段是需要的,这种“哪些字段是需要的”逻辑属于业务层面的事情
jfinal 在很早期的版本就已提供了极简支持:
1:model.keep(...) 可以在 getModel 以后,指定只保留几个属性,可以一次指定多个,如:model.keep("title", "content")
2:model.remove(...) 也可以移除指定的属性
对于这个问题的探讨,几年前就有了:http://www.oschina.net/question/260040_46570
2016-12-01 17:23
jfinal 在所有操作数据库的地方都用了 finally { conn.close(); } 确保连接被关闭,所以只要是直接使用 jfinal API 操作数据库,都确保了连接关闭
连接可能未被关闭的情况是开发者自行获取 Connection 的情况,例如:
DbKit.getConfig().getConnection() 或者
DbKit.getConfig().getDataSource().getConnection()
上述两类代码,开发者需要自行处理 connection 的关闭,建议一定要在 finally 块之中去关闭
至于贴子中出现的问题,除了上述用户自行去拿 connection 没关的情况,还有一种情况是连接获取的速度快于连接回收的速度,造成连接很快被耗尽的情况,调整下连接池大小,以及程序即可
2016-11-30 21:43
@nbjgl jfinal 为了让开发环境中的 jetty 使用体验更好,会让开发者在重启项目以后仍然可以保持住 session,就是以避免在开发类似于后台管理类项目时频繁去输入用户名和密码去登录,所以将 jetty 设置成为了重启前持久化 session 到硬盘
而这个 jetty 对session 中的数据持久化时,要求被持久化的对象是可以被序列化的,而这个 Log4jLog 对象无法被序列化,所以报这个异常
在生产模式下根本不会存在这个问题