前篇文章简单介绍了静态生成树,这篇文章将通过后台把数据通过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包。