jstree動態生成樹


      前篇文章簡單介紹了靜態生成樹,這篇文章將通過后台把數據通過json形式傳到前台,進行動態生成樹。

      本篇的程序所用框架為Spring MVC,可以很方便的通過controller層傳json到前台。

      前端jsp頁面部分代碼:

        $.get("${ctx}/tree/treeList",function(data){
          tree(data);
         }); 
        function tree(data){
            //樹形菜單
            $('#tree')
                .on("changed.jstree", function (e, data) {
                    alert(data);
                }).jstree({'core' : {'data' : data} });
        }
        

       controller層部分代碼如下:     

    @Resource
    private ITreeService<TreeVo> treeService;  

    @RequestMapping(value = "/treeList")
    @ResponseBody
    public List<TreeVo> treeList(HttpServletRequest req, Map<String, Object> rep) {
        List<TreeVo> treeList=treeService.getTree();
        return treeList;
    }

     model層TreeVo代碼如下:

public class TreeVo {
    private Long id;   //保存該節點ID
    private String parent;  //保存父節點ID
    private String text;    //保存名稱(因jstree識別text,故該屬性設為為text,而非name)
    // private List<Tree> children;
    ……
…… (get set方法)
…… }

     service 層代碼如下:

本節只簡單介紹如何處理數據。
舉例從數據庫獲取的數據類型如下:
id   path    name
1   1.1      top1 
2   1.1.1   top11
3   1.1.2   top12
4    1.2     top2
通過程序把其轉化為
id:1  parent:#    text:top1
id:2  parent:1    text:top11
id:3  parent:1    text:top12
id:4  parent:#    text:top2
protected void getTree(List<Entity> list, List<TreeVo> treeList) {
        for (Entity dep : list) {
            if (dep.getPath().substring(0, dep.getPath().lastIndexOf(".")).equals("1")) {
                TreeVo tvo = new TreeVo();
                tvo.setId(dep.getId());
                tvo.setParent("#");
                tvo.setText(dep.getName());
                getChildPath(list, dep, treeList);
                treeList.add(tvo);
            }
        }
    }

    private void getChildPath(List<Entity> list, Entity parent, List<TreeVo> treeList) {
        for (Entity dep : list) {
            if (!dep.getPath().equals(parent.getPath()) && dep.getPath().substring(0, dep.getPath().lastIndexOf(".")).equals(parent.getPath())) {
                TreeVo tvo = new TreeVo();
                tvo.setId(dep.getId());
                tvo.setText(dep.getName());
                tvo.setParent(parent.getId().toString());
                getChildPath(list, dep, treeList);
                treeList.add(tvo);
            }
        }
    }

 

都於使用Spring MVC 中的 @ResponseBody 傳遞json,若程序一切邏輯正常,卻無法把json傳至前台。可進行其下兩步操作:

1. 查看配置文件是否正確,spring-mvc.xml 中部分代碼如下:

    <mvc:annotation-driven>
        <mvc:message-converters register-defaults="true">
            <!-- 將StringHttpMessageConverter的默認編碼設為UTF-8 -->
            <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                <constructor-arg value="UTF-8" />
            </bean>
            <!-- 將Jackson2HttpMessageConverter的默認格式化輸出設為true -->
            <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
                <property name="prettyPrint" value="true"/>
            </bean>            
          </mvc:message-converters>
    </mvc:annotation-driven>
    

2.查看是否引入jackson等相應jar包。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM