2016-08-31 11:14

@飞舞稻草 建议你对比一下 jfinal 中的 Jackson.java 与自己的源码,消除差异应该就可以了,代码在: com.jfinal.json.Jackson

2016-08-31 11:09

很多人都在这么用,必然是可以的,利用一个全局拦截器,将 inv.invoke() 包裹在 try catch 之中,并处理好 catch 即可。
一般来说只要在 catch 中使用 inv.getController().render(...) 或 redirect(...) 就可以控制跳转了,监控的话,可将异常写日志,也可以是将异常发给专用的监控模块

2016-08-31 11:07

直接修改这篇贴子就可以贴代码了,不用新建贴子

2016-08-31 11:07

贴上具体的代码来看看

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

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