最近项目中用到了构造树形目录的功能,简单了解了下dtree和xtree,很多年前就用过dtree,但xtree了解不多,自己没有实际用过。之前一期项目中有相关的代码,为了加快进度就直接拿过来参考,期待能参考个较完善的版本,结果使用中还是遇到了几个问题:
1.子节点名称和父节点名称相同的部分不显示。
2.之前的代码只用到了两级目录,需要修改为支持无限级目录。
3.代码质量不高,并且排版凌乱。
问题解决:
1.有同事熟悉js,直接修改了xloadtree2.js中第340行
jsNode.setText(jsAttrs.text.replace(vvv.trim(),"")); 替换为: jsNode.setText(jsAttrs.text);
2.节点显示之前,先判断该节点有无子节点,如果有则显示为目录,没有则显示“无下级目录”。
3.代码是否整理和重构,目前我的观点是完全取决于项目的时间周期的紧迫程度。如果项目进度紧张,则先实现功能即可,时间充裕的时候再整理。
代码参考:
<script type="text/javascript"> var tree = new WebFXLoadTree("项目", "basedata_tree.jsp? level=0&&newtime=<%=new java.util.Date()%>",""); tree.write(); tree.expand(); </script>
basedata_tree.jsp
<?xml version="1.0" encoding="GBK"?>
<%@ page contentType="text/xml;charset=GBK"%>
<%@ page import="java.util.*"%>
<jsp:directive.page import="com.dhcc.rt.baseData.service.BaseDataMgrService"/>
<jsp:directive.page import="com.dhcc.common.BaseMgr"/>
<jsp:directive.page import="com.dhcc.common.util.StringUtil"/>
<%request.setCharacterEncoding("GBK");%>
<%
String level = request.getParameter("level") == null ? "" : request.getParameter("level");
String baseDataID = request.getParameter("baseDataID") == null ? "" : request.getParameter("baseDataID");
//level = "2";
//baseDataID = "6442F8803EDF423AA50A2A439BBD482E";
BaseDataMgrService baseDataMgr = (BaseDataMgrService)BaseMgr.getBean("baseDataMgr");
List list = null;
if(level.equals("0")){
list = baseDataMgr.findBaseData("","tree");
}
if(!level.equals("0")){
list= baseDataMgr.findBaseData(baseDataID,"tree");
}
int ilevel = Integer.parseInt(level);
int ilevel1 = ilevel+1;
String str = "<tree>";
int count = 0;
if(list != null){
count = list.size();
}
String key="BASE_DATA_NAME";
if(count == 0){
str = str + "<tree text=\"无下级目录\" />";
}else{
Iterator it= list.iterator();
while(it.hasNext()){
Map map=(Map) it.next();
baseDataID = StringUtil.nullToStr(map.get("BASE_DATA_ID"));
String name = StringUtil.nullToStr(map.get(key));
//out.println("name = "+ name);
if(ilevel < 1){
str=str+"<tree text=\""+name+"\" src=\"basedata_tree.jsp?level="+ ilevel1 +"&baseDataID="+ baseDataID +"\" toolTip=\"\"/>";
}else{
int subNodeNumbers = baseDataMgr.findSubNodeSize(baseDataID);//判断节点是否包含子节点
if(subNodeNumbers > 0){
str=str+"<tree text=\""+name+"\" src=\"basedata_tree.jsp?level="+ ilevel1 +"&baseDataID="+ baseDataID +"\" toolTip=\"\"/>";
}else{
str=str+"<tree text=\""+name+"\" action=\"javascript:parent.goRight('"+ baseDataID +"','')\" toolTip=\"\"/>";
}
}
}
}
str=str+"</tree>";
out.println(str);
%>