2016-11-25 11:15

@翟进博 能否贴出具体的代码来,直接修改这个贴子即可

2016-11-25 10:57

如果你继承的 ApiController 注意有没有自己声明的 class 级拦截器覆盖掉了父类的拦截器

2016-11-25 10:56

总之一句话,继承 ApiController 或者 MsgController 会自动搞定这个事,这两个 controller 上已经使用过拦截器,并且你要确保没有使用 @Clear 清除过官方搞定这个事的拦截器

2016-11-25 10:55

@Nicolas_Husky 这个 ApiConfigKit.setThreadLocalApiConfig 建议使用官方提供的拦截器自动设置,你的 Controller 继承一下 ApiController 或者 MsgController 即可

如果你要自行去调用这行代码,需要确保是在出异常地点的使用之前,而且还要确保在 finally 块中移除它,以免出现内存泄漏

2016-11-25 10:51

没玩过 Swagger,jfinal 本身就是面向 restful 思想设计的,注意,这里的 restful 并不是指博士论文中提的 restful 风格的 url,这个在前面多次讨论过

2016-11-25 10:50

贴子中的异常没有定位到 jfinal 源码中的具体方法和代码行,只定位到了你的业务代码:at com.askj.zs.xzqh.model.Xzqh.addByPar(Xzqh.java:82)
所以无法确定问题,请贴出在异常在 jfinal DbPro.java 源码中发生的地点

2016-11-25 10:46

在首页下载 jfinal weixin 1.8 版本使用,git 上的后来有一些人提交过代码,还未发布

2016-11-25 10:45

jfinal 采用的是与 spring、hibernate、struts 同样的对商业友好的 apache 2.0 协议,无需商业授权

2016-11-24 22:34

两个原因,一个是非 root 账号没有权限开启 80 端口,另一个原因是确实端口被占用

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:32

此外,还可以通过使用拦截器,或者在handler 中通过替换 HttpServletRequest 对象的方式来做,这里有一个 handler 实现参考:
http://blog.dreamlu.net/blog/57

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) 方法

2016-11-24 12:52

简单说明一下:
1:sql 参数是指 insert into 或者 update 语句,动态参数使用问号占位,例如:
String sql = "insert into user(name, cash) values(?, ?)";
上面这个 sql 其中要插入 name、cash 两个字段,而 values 中用了两个问号,这两个问号中的值从后续的 modelOrRecordList 中获取

2:columns 是指前面 sql 中问号占位的地方的参数名称,jfinal 在填充字段值的时候会根据这个名称去 modelOrRecordList 中去取数据

3:modelOrRecordList 是指 List < User > 或者 List < Record> 或者这种列表

4:batchSize 是指多少条数据写一次数据库