Record 能转化能Model吗

       String strSql = " select  *  from  _tree";

        List<Record> ls = Db.find(strSql);

        List<TreeNode> mls = new ArrayList<TreeNode>();

        for (int i = 0; i < ls.size(); i++) {

            TreeNode m = new TreeNode();

            m = m.put(ls.get(i));

            mls.add(m);

        }

        TreeBuilder tree = new TreeBuilder();

        renderJson(tree.buildListToTree(mls));


blob.png



             TreeNode m = new TreeNode();

            m = m.put(ls.get(i));

            System.out.println(m.getText());

m.getText()也是 null。


评论区

杜福忠

2017-07-27 14:30

TreeNode 是 _tree 表的 映射类吗 ?
是:
改成 List ls = TreeNode.dao.find(strSql);
直接用即可了

否:
改成:
for( Record r : ls )
mls.add(new TreeNode().put(r));
renderJson(mls);
即可

淡定007

2017-07-27 15:14

@杜福忠 不是映射类 感觉我的写法给你的一样,改成这样还是不行

淡定007

2017-07-27 15:24

@杜福忠 String strSql = " select * from _tree";
List ls = Db.find(strSql);
List mls = new ArrayList();
for (int i = 0; i < ls.size(); i++) {
TreeNode m = new TreeNode();
m.setId(ls.get(i).getStr("id"));
m.setPid(ls.get(i).getStr("pid"));
m.setName(ls.get(i).getStr("name"));
m.setUrl(ls.get(i).getStr("url"));
//mls.add(m.put(ls.get(i)));
mls.add(m);
}
TreeBuilder tree = new TreeBuilder();
mls = tree.buildListToTree(mls);
System.out.println(Json.getJson().toJson(mls));
renderJson(mls);

这么写 就有数据了 但又发现mls转json都是{}空对象

淡定007

2017-07-27 15:46

JSONObject.toJSONString(mls)这么转化就行

杜福忠

2017-07-27 16:04

@淡定007 看你 TreeNode 类的 setId 等方法 里面是怎么写的? 是 set("id", id) 还是 this.id = id 了?

淡定007

2017-07-27 19:46

@杜福忠 又发现个问题 List notRoots = (List) CollectionUtils.subtract(allNodes, roots);

这个取的差值错误

淡定007

2017-07-27 19:47

@杜福忠 public void setId(String id) {
this.id = id;
}

淡定007

2017-07-27 19:47

@杜福忠 自动生成的

淡定007

2017-07-27 19:49

@杜福忠 generate生成的

杜福忠

2017-07-27 21:05

@淡定007
回复: 这么写 就有数据了 但又发现mls转json都是{}空对象

答:
TreeNode 确定没有继承 Model 吗? 如果是继承的, 那么setId 等方法内部 需要这样写 set("id", id) ,
原因是: 源码中这样写到 attrs.put(attr, value);
public M set(String attr, Object value) {
Table table = getTable(); // table 为 null 时用于未启动 ActiveRecordPlugin 的场景
if (table != null && !table.hasColumnLabel(attr)) {
throw new ActiveRecordException("The attribute name does not exist: \"" + attr + "\"");
}

attrs.put(attr, value);
getModifyFlag().add(attr); // Add modify flag, update() need this flag.
return (M)this;
}

然后默认解析json的时候源码这样写的:

if (value instanceof Model) {
Map map = com.jfinal.plugin.activerecord.CPI.getAttrs((Model)value);
return mapToJson(map, depth);
}
if (value instanceof Record) {
Map map = ((Record)value).getColumns();
return mapToJson(map, depth);
}

而:
com.jfinal.plugin.activerecord.CPI.getAttrs((Model)value);
中调
protected Map getAttrs() {
return attrs;
}

所以:
如果你用
public void setId(String id) {
this.id = id;
}

那么 attrs Map中就没有值了~~
json中也就没有值了~
这个就是原因了~
再问需要发5毛红包了 ~2333

杜福忠

2017-07-27 21:06

@淡定007 generate jfinal 有专用的生成器

淡定007

2017-07-28 09:15

@杜福忠 谢谢 继承了 不继承都没put方法,但没发现 jfinalmodel比较特殊

热门反馈

扫码入社