2016-12-04 23:06
@jcdilon 在后端先这样: Json.getJson().toJson(user) 生成 json 数据,然后输出来看看是否正确,正确以后再输出到客户端即可
2016-12-04 23:04
@不想起哄 加双引号是为了让表字段、表名支持数据库保留字,例如有些数据库的字段名不能使用 user、right 这样的单词
jfinal 内部解决也是可以的,只不过要在生成方言时去判断你贴出来的代码中的 test.test_table 这种情况,实现起来不仅代码不优雅,而且会有点性能损失,jfinal 倾向于通过扩展方式解决个性化需求
假定某一版本对 PostgreSqlDialect 进行了修改,有可能会有影响,但方言这种东东,几乎不会改,非常稳固,即便是改了,也是一两行代码,可以很快跟上升级的步伐
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 18:23
@lyh061619 你甚至可以这样删: Db.update("truncate table ....") ,慎用,会无条件删掉表里所有数据
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 不支持双引号,我也是头一回碰到,闻所未闻