2016-11-25 11:24
@翟进博 这个就奇怪了,ArrayList 没有用泛型,是什么都可以放进去的,感觉还得再仔细调试一下,寻找确切原因,你那里难得重现这个问题,麻烦帮忙确定原因,然后试着改改代码,看能否解决,再反馈给社区
2016-11-25 10:55
@Nicolas_Husky 这个 ApiConfigKit.setThreadLocalApiConfig 建议使用官方提供的拦截器自动设置,你的 Controller 继承一下 ApiController 或者 MsgController 即可
如果你要自行去调用这行代码,需要确保是在出异常地点的使用之前,而且还要确保在 finally 块中移除它,以免出现内存泄漏
2016-11-24 15:25
@芒果过敏 上一个回复讲了这么多,简单来说就是,虽然 enhance 的是 A,但 B的业务方法处于 fa() 事务之中,这个与 B 有没有被 enhance 没有关系,事务依然有效
2016-11-24 15:24
@芒果过敏 假如你有两个 Service 分别叫做 A 和 B,A 和 B 里面分别有两个业务方法 fa() 和 fb(),那么你在 fa() 上使用 Tx 拦截器,并且对 A 进行 enhance(),在如果 fa() 中调用了 f(),那么 f() 仍然处于事务之中, Tx 是一种环绕型 AOP,其下所有被调用的方法都在事务之中,不必担心
2016-11-24 14:27
用 jsoup 这个工具类过滤一下用户提交的数据即可,一行代码的事:
Jsoup.clean(html, Whitelist.basicWithImages());
如果要对过滤放宽松点用这行:
Jsoup.clean(html, Whitelist.relaxed());
在具体实践中,可以扩展一下 BaseModelGenerator,再多生成 save() 与 update() 方法,这两个方法是用户提交数据的大部分入口,在这两个方法中添加过滤即可
jfinal 2.3 在 model 中提供了一个 filter() 方法,可以让开发者在自己的 model 中覆盖此方法,添加上过滤功能,也是一行代码的事,2.3 上线之前可以选通过前面介绍的主法,或者直接在最终的 model 中手动创建 save()、update() 进行过滤
2016-11-24 13:34
jfinal 所说的无 getter、setter 是指最终的 Model 中并没有 getter、setter 代码,你的 Model 是干净清爽的,所有的 getter、setter 是在 BaseModel 之中,并且是生成器自动生成的,所以不会增加开发者的工作量
jfinal 的 model 结合了 Active Record 模式的动态化与传统 java bean 的静态化优点
1:动态化优点:
动态化优点是指从数据库查出来的字段值不一定是你当前 model 所拥有,例如有 user 与 article 两张表,其中的 article 中有一个 userId 字段关联到 user,那么你可以这么用:
Article article = new Article().find("select a.*, u.nickName from article as a inner join user as u on a.userId = u.id")
然后可以利用 article 直接取出不属于 article 表的属性:
article.getStr("nickName")
这种用法在传统 java bean 模式下是无法做到的,因为传统 java bean 模式中的 article 并不存在 getNickName() 这个 getter 方法
2:静态化优点
静态化优点是指,生成 getter、setter 方法在 BaseModel 之中以后,在开发过程中有 eclipse、IDEA 这类开发工具做静态检查,减少出错的可能性,例如:article.setTitle(...) 有静态检查,而 article.set("title", ...) 并没有
一句话总结就是:jfinal 的 Model 层是一个集动态化与静态化优点于一身的设计,在常规使用的时使用 getter、setter 方法,在需要动态化的时候使用动态化的 model.set(key, value) 与 get(key) 方法