14年写过的代码 今年写的时候 完全没印象 ,好记忆不如烂笔头。前台bootstrap 后台 springmvc
截取部分重要代码 主要是table tr上有个id 有个pId 代表节点 父节点 name是显示节点名称。
<lable class="fa fa-list"></lable>
区域列表</a></li>
</ul>
<div class="tab-content">
<tags:showMessage />
<table id="treeTable" class="table table-striped table-bordered table-advance table-hover table-condensed">
<thead>
<tr>
<th>区域</th>
</tr>
</thead>
<c:forEach items="${list}" var="vo">
<tr id="${vo.id}" pId="${vo.pId ne '1'?vo.pId:'0'}">
<td> ${vo.name}</td>
</tr>
</c:forEach>
</table>
</div>
</div>
</div>
</div>
</div>
<!-- END CONTENT BODY -->
</div>
</body>
</html>
<content tag="myJavascript">
<link href="${ctx}/static/assets/treeTable/themes/vsStyle/treeTable.min.css" rel="stylesheet" type="text/css"/>
<script src="${ctx}/static/assets/treeTable/jquery.treeTable.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function () {
$("#treeTable").treeTable({
expandable : true,
initialState:"expanded",
//expandable : true
clickableNodeNames:true,//点击节点名称也打开子节点.
indent : 30//每个分支缩进的像素数。
});
});
</script>
springmvc : list是查询出拼成带有id,pid,name的数据。sortlist最为关键 递归排序。没有sortlist 拼的树在jsp页面子节点 被展示 不是挂到父节点下。只能通过递归来挂到父节点下。
@RequestMapping("treemeter")
public String treemeter(Model model, JlMeterRel m) {
List<ZTreeOfMeterVo> list = jlMeterRelService.getZTreeOfMeterInfos();
List<ZTreeOfMeterVo> newList = Lists.newArrayList();
ZTreeOfMeterVo.sortList(newList, list, "0");
model.addAttribute("list", newList);
return viewName("treeofmeterlist");
}
public class ZTreeOfMeterVo extends ZTree{
public static void sortList(List<ZTreeOfMeterVo> list, List<ZTreeOfMeterVo> sourcelist, String parentId){
for (int i=0; i<sourcelist.size(); i++){
ZTreeOfMeterVo e = sourcelist.get(i);
if (StringUtils.isNotBlank(e.getpId())
&& e.getpId().equals(parentId)){
list.add(e);
// 判断是否还有子节点, 有则继续获取子节点
for (int j=0; j<sourcelist.size(); j++){
ZTreeOfMeterVo child = sourcelist.get(j);
if (StringUtils.isNotBlank(child.getpId())
&& child.getpId().equals(e.getId())){
sortList(list, sourcelist, e.getId());
break;
}
}
}
}
}
}
Ztree:主要是id pid name 因为我们树形插件用到ztree.js 本人懒 不想自己再写一个结构id,pid,name
的pojo.所以继承过来
private String id;
private String pId;
private String name;
private String iconSkin;
private boolean open;
private boolean root;
private boolean isParent;
private boolean nocheck;
private boolean isRelation;
private String relationId;
}
Service :处理树业务逻辑。这个就是拼一个root节点0 展开的全部数据的树节点。(主要拼成列表要的)
/**
* 获取树形list(房产位置-房产 树)
* @return
*/
public List<ZTree> getZTreeList(){
List<ZTree> ztreeList = houseLocationService.topNode();
ztreeList.addAll(jlMeterRelMapper.findZTreeOfMeterInfos());
return ztreeList;
}
/**
* 往树上写计量表统计信息
* @return
*/
public List<ZTreeOfMeterVo> getZTreeOfMeterInfos(){
//区域获取房间
// feeStandardService.getHouseBelongParentId(topList.get(0).getId(), topList)
List<ZTreeOfMeterVo> list = new ArrayList<ZTreeOfMeterVo>();
for(ZTree zTree: this.getZTreeList())
{
ZTreeOfMeterVo vo = new ZTreeOfMeterVo();
BeanUtils.copyProperties(zTree, vo);
list.add(vo);
}
return list;
}
@Select("select a.objid id,a.tarid pId,b.loname name from stru_relshp a,location b "+
" where a.objid=b.id and a.relat='204' and current_date between a.start_date and a.end_date order by a.ranse asc ")
public List<ZTree> findZTreeOfMeterInfos();
}
综上:根据jsp table需要的数据结构 从数据库中取出 拼凑出来。然后通过递归排序遍历下在List里的顺序。大功告成。关键就是sortlist.最终运行