jqueryでのEasyUI非同期ツリーの実装

2756 ワード

フロントはEasyUIで実現する.EasyUIはバックグラウンドにidパラメータを渡す.
最初のロードは、バックグラウンドに伝達するidがnullである.
その後、ツリーノードを展開するたびに、現在のノードのidがバックグラウンドに伝達される.
Controlレイヤ:
 
  
 /**
  * tree
  */
 @RequestMapping(value = "/tree.do")
 public void mytree(HttpServletResponse response, String id) {
  this.writeJson(response, bookService.getChildrenTree(id));
 }

サービス層:
 
  
 @Transactional
 @Override
 public List getChildrenTree(String pid) {
  try {
   List result = new ArrayList();
   //
   List childrenList = this.getChildrenType(pid);
   if (childrenList != null && childrenList.size() > 0) {
    for (TBookType child : childrenList) {
     //
     long count = bookDao.getChildrenCount(String.valueOf(child.getId()));
     Tree node = new Tree();
     node.setId(String.valueOf(child.getId()));
     node.setPid(String.valueOf(child.getPid()));
     node.setText(child.getName());
     node.setChildren(null);
     node.setState(count > 0 ? "closed" : "open");
     // childrenList
     result.add(node);
    }
   }
    return result;
  } catch (Exception e) {
   throw new BusinessException(" !", e);
  }
 }

Dao層:
 
  
 @Override
 public List getChildrenType(String pid) {
 // pid id , id
 StringBuilder sqlstr = new StringBuilder();
  if (StringUtils.isBlank(pid))
   sqlstr.append("select * from booktype bt where bt.pid=0");
  else
   sqlstr.append("select * from booktype bt where bt.pid=" + pid );
  return this.search2(TBookType.class, sqlstr.toString());
 }
 
  
 @Override
 public long getChildrenCount(String pid) {
 // pid id , id
  StringBuilder sqlstr = new StringBuilder();
  if (StringUtils.isBlank(pid))
   sqlstr.append("select count(*) from booktype tb where tb.pid='0'");
  else
   sqlstr.append("select count(*) from booktype tb where tb.pid='" + pid + "'");
  return this.count(sqlstr.toString());
 }
 

以上,EasyUI実装非同期ツリーのすべてのコードについて述べたが,皆さんの役に立つことを願っている.