2016-08-31 11:06

jfinal 默认使用的是 JFinalJson 来做的 json 转换操作,在做转换时只对 Model 中的 Map attrs 进行处理,对 attrs 反序列化比较麻烦,代码量过大,所以暂未支持

而 JacksonFactory 反序列化使用的是 model 中的 setter 方法,而不是 Map attrs,所以反序列化比较容易,也是最常规的处理方式

JFinalJson 其实也可以去利用 setter 方法来反序列化,但已经有 jackson、fastjson 这样非常专用的工具实现了,就不再重复造轮子了,而是利用 JacksonFactory、FastjsonFactory 直接使用第三方

2016-08-30 21:56

jfinal 的默认 json 实现在转换json string 时,只对 model 中的 Map attrs 进行转换,不会理会 getter 方法,所以切换到 fastjson 或者 jackson 实现就可以,前提是先用 jfinal 2.2 的生成器生成 base model,因为这样 model 才拥有 getter、setter 供其使用

2016-08-30 21:55

介绍比较简单的解决方案,方案一:
1:去掉 private List group 类似的属性
2:可留下 setGroup(List group)这样的方法,在此类方法内部使用 put(k, v) 与 get(k, v) 的形式将数据存放在 model 的 Map attrs 属性中即可

方案二:
1:使用 jfinal 2.2 的 Generator 生成 baseModel,为 model 添加上了 getter、setter
2:在最终的 Model 例如上例中的 Servers 类中添加你所需要的额外属性与 getter、setter
3:通过 me.setJsonFactory(new FastjsonJsonFactory()) 将 json 实现切换到 fastjson,这样在转换 json 时会根据 setter 与 getter 来转换,就会照顾到你额外添加的 getter 方法

2016-08-30 20:59

最简单的办法是让 getBean()或getModel() 带上 true 参数,这样就会跳过那些自定义参数,然后再单独处理那些参数,例如:
bean = getBean(Xxx.class, "", true);
bean.set("cc", getPara("cc"));

还有一种方式是通过在表单中使用 model 前缀用来表明哪些域是对就到 model 上的,没有前缀的,或者前缀不相同的单独处理

2016-08-30 17:32

@justcode 只要设置成 utf-8,然后关闭 eclipse 再重新打开一下就好了

2016-08-30 17:09

new 出来的这个 Config 也是可以指定 IContainerFactory 实现类的,所以,你可以为其注入 CaseInsensitiveContainerFactory 实现类

2016-08-30 17:08

jfinal-ext 确实很久没有更新了,建议去群里问一下 @绝望的八皮 的更新计划

2016-08-30 15:11

@nbjgl 把搞定的方案回来发个分享哈

2016-08-30 12:37

@cyx3954 把解决方案分享出来哈 ^_^

2016-08-30 09:59

@zdhl 正常情况下应该是输出一个主键值,换驱动吧,历史上多次出现过 oracle 驱动出现的问题,例如参数超过 8 个的时候出异常的问题,换驱动解决以后回来分享一下。

2016-08-30 00:23

感谢你的分享,如果后续有方案别忘了再回来分享一下,感谢支持

2016-08-30 00:23

关键点在于在 sqlite 中使用 getColumnClassName(i) 获取不到正确的类型,而 getColumnType(i) 可以获取到正确的类型,这个行为只有在 sqlite 中是这样,在其它数据库中是正常的

目前来说,建议通过 public class MySqliteMetaBuilder extends MetaBuilder 并且覆盖掉 builderColumnMetas(...) 方法来支持 sqlite 数据库,jfinal 后续版本会考虑改进的办法

总的来说,现有的获取 meta 的方式非常稳定,只是 sqlite 中出现意外,不大可能会单独为了 sqlite 去改变以前的处理方式,一是为了稳定性。二是由于 getColumnType(i) 或许仍然不能像 getColumnClassName(i) 一样非常精准地得到相应的 java 类型

2016-08-30 00:15

@zdhl 单步调试一下,看是哪一步出的问题,在 MetaBuilder 中设置断点,查看获取 id 的那部分代码执行的情况

2016-08-29 21:04

@Kerwin 升级下驱动试试,出现这种情况表明 JDBC 无法正确反射出正确的类型,记得搞定后发篇分享出来,感谢支持 jfinal 社区

2016-08-29 21:02

@zdhl 我这里没有 oracle 的测试环境,无法重问题,希望你解决后发一篇分享出来,感谢支持 jfinal 社区