2016-12-04 17:44

创建一个 public class MyDialect extends PostgreSqlDialect,然后 copy 出父类所有代码,将其中的双引号去掉,最后再 arp.setDialect(new MyDialect()) 用自定义的 MyDialect 替换官方提供的即可打完收工

记得搞定后回来分享一下

2016-12-04 14:04

上面代码没有得到正确的值是因为 arp.addMapping 的时候第二个参数弄错了,第二个参数是主键名,以 USERS 这张表为例,主键名是 "ID",所以应该是:
arp.addMapping("USERS", "ID", User.class);
通过上面的设置,getModel 工作就正常了

第一个问题:只需要设置部分值就可以,不用全设置
第二个问题:下拉框、radio 与普通的 input 输入框架是类似的,只要确保 name 属性值是正确的就可以,web 后端并不知道前端是什么输入组件,只认 parameter name = value ,具体在开发的时候,先尝试性的放上下拉框、radio这类东东,写好 name 属性值,然后提交后看控制台输出的 jfinal action report 就知道怎么继续了

2016-12-04 00:05

@潇洒太爷 单步调一下,如果 DbKit.getConfig().getConnection() 得到的 connection 对象仍处于 jfinal 的 Tx 管理之下,也不会有问题,关键点在于这个 connection 是不是 jfinal 最先获取并放入 threadlocal 之中的,如果是的话,没有问题

建议所有自行获取 connection 的地方都用 finally{} 块来关闭,不要心存侥幸

2016-12-02 21:39

@劲风 感谢支持,jfinal 2.3 更加好用,正在内测中,多多关注社区动态

2016-12-02 20:22

@劲风 感谢你的支持,刚才收到 99 的捐助,看到你的昵称,应该是你的捐助,非常感谢你对 jfinal 社区的支持

2016-12-02 20:21

@劲风 文档频道功能早就做完了,一直没时间,这个频道会出非常详细的文档

2016-12-02 18:23

@lyh061619 你甚至可以这样删: Db.update("truncate table ....") ,慎用,会无条件删掉表里所有数据

2016-12-02 18:16

web.xml 中的 welcome-file-list 只能接管静态请求,例如 index.html 这样带 ".html" 后缀的,如果是动态请求,会直接被 jfinal 接管

2016-12-02 18:14

@劲风 前面是指“控制层”拦截器,不是“控制”拦截器。这样整理一下思路,一切都好理解了:
1:拦截器可以用在两个层面,一个是“控制层”,另一个是“业务层”,其中“业务层”是一种狭义的说法,更加合理的说法是“非控制层”,也就是说所有“控制层”之外的情况

2:“控制层”拦截器是指用在 Controller 上的拦截器,“业务层”拦截器是指用在 "非Controller" 的其它地方的拦截器

3:无论什么拦截器都分为三种:global、class、method级

4:控制层拦截器的 global 通过 me.add(...) 添加,非控制层的 global 通过 me.addGlobalServiceInterceptor(...) 添加

5:控制层与非控制层的 class 级拦截器都是通过在紧靠 public class 的地方使用 @Before(...) 添加

6:控制层与非控制层的 method 级拦截器都是通过紧靠在方法声明的地方使用 @Before 添加

7:控制层拦截器是自动触发的,有了上述的添加,会自动触发,非控制层的拦截器需要先通过 Duang.duang(...) 或者 Enhancer.enhance(...) 以后,才能被触发

简单总结起来其实就两点:
1:两类拦截器的配置方式是类似的,唯一不同的是配置全局拦截时调用的方法名不同,一个是 me.add(...) 一个是 me.addGlobalServiceInterceptor(...)

2:控制层拦截器自动触发,而非控制层需要先增强

2016-12-02 16:48

@静静滴疯 我再补充一下,jfinal 生成的 sql 对不同的数据库会在字段名称前后添加不同的转义字符,例如 myslq 是添加 "`",postgresql 是添加 """,这样处理是为了使用字段名可能支持数据库保留字

postgresql 处理保留字的方式就是对字段加双引号,你的 postgresql 不支持双引号,我也是头一回碰到,闻所未闻

2016-12-02 16:41

@静静滴疯 也就是说你的 postgresql 不支持双引号对吧? 解决办法极其简单
1:创建一个public class MyPostgresqlDialect extends PostgresqlDialect,将父类的所有代码 copy 进来,然后将双引号去掉

2:arp.setDialect(MyPostgresqlDialect());

这个问题,可能是你的 postgresql 配置问题,默认是支持双引号的

2016-12-02 16:39

关于业务层拦截器,AppConfig 中配置是指配置全局拦截器,如果你不需要全局拦截器则不需要,这一条与控制层拦截器也是一样的。第二条与控制层拦截器是一样的。只有第三条是业务层独有的,需要对被拦截的类进行一下增强,控制层拦截器是自动增强的,不需要 Duang

2016-12-02 16:37

把这条 sql copy出来,放在控制台能否被正确执行?

2016-12-02 16:36

年底有三个项目着急交付,周末有 jfinal 2.3 要开发,暂时顾不上社区,社区上线马上快半年了,连 jfinal 一万多人的 qq 群都没通知过,想想还有哪位站长会能做得出来

2016-12-02 16:31

批量删早就有了: Db.update("delete from table whre ...", ?, ?, ?) 一行代码搞定