使用ext4生成动态树,后台的action怎么写?前台代码:       Ext.define('knowlTreeModel',{
    extend: 'Ext.data.Model',
    fields: [{
        name: 'id', type: 'string'
    },{
     name: 'text', type: 'string'
    }]
});

var knowlTreeStore = Ext.create('Ext.data.TreeStore',{
model: 'knowlTreeModel',
    proxy: {
     type: 'ajax',
        url: 'knowlPoint.do?method=trunkTree'
    },
    reader: {
     type: 'json'
    },
    root: {
     id: 'rootNode',
     text: '根节点',
     expanded: false
    }
});

var knowlTreePanel = Ext.create('Ext.tree.Panel',{
    width: 300,
    height: 450,
    store: knowlTreeStore,
    rootVisible: true,
    renderTo: 'knowlTreeDiv',
    autoScroll: true
});

knowlTreePanel.store.load();
跟踪发现展开一个节点时就会调用后台action一次。请问后台如何得知当前要展开的节点的Id,以生成其子节点?
或者哪位知道怎么动态生成树?

解决方案 »

  1.   

    折腾了大半天,问题解决了。只需要在action里面完成整个树的生成。在叶子节点上加属性leaf:true即可。等代码写完后再贡献给大家。现在先给出示例:
    StringBuilder sb = new StringBuilder();
    sb.append("{ id: 'rootnode', text: '知识点', children: [");
    sb.append("{ id: '"+UUID.randomUUID().toString()+"', text: '化学',leaf: true},");
    sb.append("{ id: '"+UUID.randomUUID().toString()+"', text: '生物',children: [" +
    "{id: '"+UUID.randomUUID().toString()+"',text: '动物',leaf: true}]}");
    sb.append("]}");
    writeJson(response, sb.toString(), null);//write a json string to client
      

  2.   

    问题已经解决,把代码贴出来贡献给大家:1 Action:public String trunkTree() {
    try {
    DTypeFacade facade = new DTypeFacade();
    writeJson(getResponse(), facade.dtypeJsonTree());
    } catch (Exception e) {
    // TODO: handle exception
    try {
    writeJson(getResponse(), "{success:" + false + ",msg:\"查询失败!\"}");
    } catch (Exception e2) {
    // TODO: handle exception
    }
    e.printStackTrace();
    }
    return null;
    }
    2. DTypeFacadepublic String dtypeJsonTree() {
    // TODO Auto-generated method stub
    StringBuilder sb = new StringBuilder();
    sb.append("{ id: 'rootNode', text: '根节点'");
    sb.append(CreateTree(1, null));//递归生成树
    sb.append("}");
    return sb.toString();
    }private String CreateTree(int level,String parentId){
    List<TbDoctype> nodes = null;
    if (level == 1) {
    nodes = service.getDTypeByLevel(1, null);
    }else {
    nodes = service.getDTypeChildren(parentId, null);
    }
    StringBuilder ssb = new StringBuilder();
    if (nodes == null || nodes.size() == 0) {
    ssb.append(",leaf: true");
    }else {
    ssb.append(", children: [");
    for (int i = 0; i < nodes.size(); i++) {
    TbDoctype doctype = nodes.get(i);
    ssb.append("{ id: '" + doctype.getDid() + "', text: '" +
    doctype.getDtypecode() + ":" + doctype.getDtypename() + 
    "', level: "+level);
    ssb.append(CreateTree(level+1, doctype.getDid()));
    ssb.append("},");
    }
    ssb.deleteCharAt(ssb.length()-1);
    ssb.append("]");
    }
    return ssb.toString();
    }
      

  3.   

    楼主别忘了分我分啊。其实后台只要把整棵树生成就可以了啊。比如:-root
      --计算机学院
        ---硬件专业
        ---软件专业
      --数学学院
      --外国语学院
        ---法语专业生成以后转换为json字符串传到前台就OK了。希望能帮到你哦~~
      

  4.   

    writeJson(getResponse(), facade.dtypeJsonTree());
    楼主这个里的这个getResponse()为啥我这里不能用呢?
      

  5.   

    getResponse()是我自己封装的一个方法。
    完整内容这样:
    public HttpServletResponse getResponse() {
    return ServletActionContext.getResponse();
    }