2017-03-02 17:21

还有一点:
上面说了 renderJson 默认是使用jfinalJson处理,是可以进行Record 的 json的转换,但是fastjson 不支持(使用fastjson进行Record的 rederJson 得到的大约是这样的数据:{"columnNames":[],"columnValues":[],"columns":[]})
虽说可以使用MixedJsonFactory 在进行 parse和tojson的时候使用不同的方式,
但是如果遇到返回前台的数据中有多重类型形势,有我们自定义的普通java类(就是不想要null值的属性的对象),也有查询出来的Record的list等,怎么办呢?
解决方案一:
完整代码:
Page page = Db.paginate。。。。。。。。。。。。。。

Map result = new HashMap();
result.put("rows", JSON.parse(JFinalJson.getJson().toJson(page.getList())));
result.put("total",page.getTotalRow());
result.put("people", people);
this.renderJson(result);

设置默认的json使用fastJson:
me.setJsonFactory(new FastJsonFactory());
代码里对于Recored 的list进行两次转换如:
JSON.parse(JFinalJson.getJson().toJson(page.getList()))
就是先用JfinalJson 把Record转换成字符串,再用fastJson转换成json对象
最后使用 renderJson(obj);
反正这样我是成功了

感觉不是最好的解决办法!最好的办法就是 JfinalJson中有方法可以进行
JFinalJson.toJson(obj,boolean);//true 忽略掉null
this.renderJson(result,true);

这貌似需要修改源码了!



@JFinal 波总还有什么高见?

2017-03-02 16:09

问题解决:
解决办法:
在config中 设置me.setJsonFactory(new FastJsonFactory());//因为我用的是fastjson
原因:1. jfinal renderJson 默认会使用 自己的 JFinalJsonKit 来处理 不会忽略掉null;而fastjson 会忽略掉,所以这里要使用一致的json工具来处理json 很重要
2.为什么继承自model的类不会有null?因为它就没有属性是一个空类,当然啥都没有。
另外:
JFinalJsonFactory 不支持 Record 的 json 转换
波总建议的使用: me.setJsonFactory(new MixedJsonFactory());
回复为啥不支持上传图片?!
@JFinal 还有没有其他补充

2017-03-02 15:03

@JFinal 这是赤果果 的 java 类 歧视啊!
详细说明一下。jfinal版本3.0
简单的例子:其中Menu 是继承 jfinal Model的 模型类,People类是 自己建立的一个最简单的普通java对象 带有getset方法;
Menu m = new Menu();
People p = new People();
都没有任何的赋值操作,分别执行下面的方法
renderJson(m);和 renderJson(p);的时候
前台页面得到的是两种结果
{}和{"sex":null,"address":null,"age":null,"name":null}
这让我感到很彷徨!

2017-03-02 14:52

@JFinal 经过实验得到了一个结论!
renderJson(object);
这个object里面如果是JFinal 的 model 那么就会是空
如果是自己创建的一个普通java类,那么就会把这个类中所有的属性和属性值作为null传给前台;

2017-03-02 12:43

@JFinal 试过了你这样也是不行!前台收到的还是带有一大堆这个opt打印中没有的那么多的值为null的属性。如果是使用 JSON.toJSONString(opt); 这样是可以的!后台打印的东西,前台也获得是一致的。
我理解的是,renderJson的时候是不是会去找这个对象,然后进行对对象中所有的成员属性进行转换,而不是直接处理解析传入的json对象!所以我得把他转成字符串,这样renderJson就不知道是什么对象,就当普通字符串处理传递到前台了?

2017-03-02 11:50

@lyh061619 renderText只能放入string类型的,我这里是对象!之所以要new 一个 jsonObject 是因为要放入多个,这里只是jobj放了一个option,我还有rows等其他对象要放入一起renderJson到前台

2016-09-13 17:33

@JFinal 嗯! 这里是不是有必要增加个 get(tableName) 返回 model 的方法!我目前主要业务场景是在一个方法中根据表名的不同动态生成不同的model实例,好实现该方法的通用性!

2016-09-13 17:23

@大青山 怎么拿过来用,比如说你再controller里面 传过来表名了,你怎么知道这个表对应的model是那个?

2016-09-13 17:21

我目前想的办法是,自己建个map来存储表名和class名 的 key value,启动的时候初始化,放到全局变量里面!不知道是否有更好的办法?