第一步:从数据库中取得数据,并封装为map集合,如下代码:
@Controller
@Results(value={@Result(name = "success", type = "chain", location = "channel"),
@Result(name="channelJson",type="json")})
public class ChannelTreeAction extends PersistAction{
private static final long serialVersionUID = 1L;
@Autowired
ChannelService channelService; //要取数据库中数据的service
private List channelList = new ArrayList(); //数据集合
//总数据map集合
private Map allChannel = new HashMap();
//树节点map集合
private Map> rootTree = new HashMap>();
/**
*此方法用于json封装
*/
public String channeTree(){
channelList = channelService.findAll(); //从数据库中取出所有数据,并放到集合中
Collections.sort(channelList) ; //对集合进行排序
List li = new ArrayList(); //声明一个临时集合,用于存放“根节点”
for(Channel ch:channelList){ //对集合进行迭代
allChannel.put(ch.getChannelId()+"", ch); //将数据以自己id做key,以对象本身做value,放到map集合中
if(ch.getChannelId()==1){ //产生根节点,此处重要,用你已知条件产生,此处我用对象的id=1产生
li.add(ch);
}
}
for(Channel rootChannel:li){ //迭代临时存放"根节点"的集合
decreaseTree(rootChannel.getChannelId()+""); //调用“递归树”方法
}
return "channelJson";
}
//递归树
private void decreaseTree(String channelID){
List frequencyLsit = new ArrayList();//临时创建的存放次级目录的集合
for(Channel ch:channelList){ //迭代数据集合,取出符合条件的下一级目录
if(channelID.equals(ch.getParent().getChannelId()+"") && ch.getChannelId()!=1){ //下一级目录的控制条件
frequencyLsit.add(ch); //添加到“临时存放次级目录集合”中
}
}
if(!frequencyLsit.isEmpty()){ //如果“次级目录集合”不为空,则执行
rootTree.put(channelID,frequencyLsit);//以父节点的id作为key,以子节点的集合作为value放到“树节点map集合”中
for(Channel fq:frequencyLsit){ //迭代“次级目录集合”
decreaseTree(fq.getChannelId()+""); //调用自己方法完成递归
}
}
}
public List getChannelList() {
return channelList;
}
public void setChannelList(List channelList) {
this.channelList = channelList;
}
public Map getAllChannel() {
return allChannel;
}
public void setAllChannel(Map allChannel) {
this.allChannel = allChannel;
}
public Map> getRootTree() {
return rootTree;
}
public void setRootTree(Map> rootTree) {
this.rootTree = rootTree;
}
public void setChannelService(ChannelService channelService) {
this.channelService = channelService;
}
}
**************************************************************************************************************