前台框架是easyui,需要返回给前台tree的数据,返回的数据格式为[{id:1,text:22,children:(map)},{id:2,text:22,children:(map)},{id:3,text:22,children:(map)},{id:4,text:22,children:(map)}]。就是List<Map<String,Object>>。
这里需要注意的是递归方法中要做的内容必须要清晰,对于该递归方法而言,任务就是要把传入的Element的数据提取到传入的map中,如果该element有对应的子节点,则得到子节点,把子节点的element递归调用该方法,同时传入的还有childMap。
代码为:
public static List<Map<String, Object>> getFileList() {
List<Map<String, Object>> redata = new ArrayList<Map<String,Object>>();
Document document = FileDao.readFile("cda/fileConfig.xml");
Element rootElement = document.getRootElement();
List<Element> lists = rootElement.elements();
for (Element element : lists) {
Map<String,Object> map = new HashMap<String,Object>();
eachFile(element, map);
redata.add(map);
}
return redata;
}
@SuppressWarnings("unchecked")
public static void eachFile(Element element,Map<String,Object> map) {
map.put("id", element.attributeValue("id"));
map.put("text", element.attributeValue("text"));
List<Map<String, Object>> childList = new ArrayList<>();
map.put("children", childList);
if(element.elements()!=null){
List<Element> childElements = element.elements();
for (Element child : childElements) {
if(!child.getName().equals("dataset")){
map.put("state", "closed");
Map<String,Object> map1 = new HashMap<String,Object>();
eachFile(child,map1);
childList.add(map1);
}
}
}
}
这里需要注意的是递归方法中要做的内容必须要清晰,对于该递归方法而言,任务就是要把传入的Element的数据提取到传入的map中,如果该element有对应的子节点,则得到子节点,把子节点的element递归调用该方法,同时传入的还有childMap。
如果不传入map,则在方法内新建map,构建完map后返回。改造后如下代码:
public static List<Map<String, Object>> getFileList() {
List<Map<String, Object>> redata = new ArrayList<Map<String,Object>>();
Document document = FileDao.readFile("cda/fileConfig.xml");
Element rootElement = document.getRootElement();
List<Element> lists = rootElement.elements();
for (Element element : lists) {
redata.add(eachFile(element));
}
return redata;
}
@SuppressWarnings("unchecked")
public static Map<String,Object> eachFile(Element element) {
Map<String,Object> map = new HashMap<String,Object>();
map.put("id", element.attributeValue("id"));
map.put("text", element.attributeValue("text"));
if(element.elements()!=null){
List<Element> childElements = element.elements();
List<Map<String, Object>> childList = new ArrayList<Map<String,Object>>();
map.put("children", childList);
for (Element child : childElements) {
if(!child.getName().equals("dataset")){
childList.add(eachFile(child));
}
}
if(childList.size()!=0){
map.put("state", "closed");
}
}
return map;
}