juery treeview 动态加载(实现)

阅读更多
最近一直在做一个树的动态加载,可在网上找了半天也没找到太合适的答案,不过有一个写的还是不错的,只不过在第一次加载的时候是完全加载树,而不是动态实现的,今天本想引用一下,再他的基础上修改的,但没有找到。

本树的说明如下:
1、树实现动态加载
2、要传递一个按钮的参数,比如是单选,还是复选
3、只有是叶子节点才有按钮出现
如果有需要可以在此基础上进行修改,我的并不完善,只是实现了功能。

用的struts1.2框架
首先、从页面开始写: html代码如下:


树将在id为back的位置进行展示。
   js代码如下:

这个是展示树的页面,进入这个页面的时候会自动加载这个treeview,调用url地址,  url的参数可以接收过来,demo.do?method=findChildren&viewBox=1这地方的viewBox代表按钮的是单选还是复选。
在此页面要要引入jquery  treeview ,可以参照juerytreeview的例子async.html
其次、配置struts 1.2action


最后 actioin中代码如下:
public ActionForward findChildren(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
            //此处动态加载要设置的头信息
            response.setHeader("Cache-Control", "no-cache");
            response.setContentType("text/json;charset=UTF-8");
            request.setCharacterEncoding("utf-8");
            PrintWriter out = response.getWriter();
            String viewBox = request.getParameter("viewBox");
            String root = request.getParameter("root");
            if("source".equals(root)){
                root="parent";
            }
            String output= getNode(root,viewBox);
            out.write(output);
            out.flush();
            out.close();
            return null;
    }
//以下代码为业务代码,用来查询子节点,生成json格式数据,具体的json格式请参
//考treeview例子中的 source.html,这里用了spring服务注入,DemoVo 为是javaBean 有三个字段  其中 根据 code name 还有父节点 parent
  private String getNode(String code,String viewBox) throws Exception{
            StringBuffer sb = new StringBuffer();
            sb.append("[");
            List temp = null;
            if(demoService.hasSubItem(code)){//有孩子执行
                temp = demoService.findChildrenByParent(code);//根据code查询其孩子
                int j=0;
               for (int i = 0; i < temp.size(); i++,j++) {
                   if(j>0){
                       sb.append(",");
                   }
                    sb.append(" {");
                    DemoVo item = (DemoVo)temp.get(i);
                    if(demoService.hasSubItem(item.getCode())){//有孩子
                        sb.append("  \"text\": \""+item.getName()+"\""); //这里是显示的名称
                        sb.append(",");
                        sb.append(" \"hasChildren\": true");  //设为true预留会显示+号
                    }else{//叶子节点 显示按钮
                        sb.append("  \"text\": ");
                        if("1".equals(viewBox)){
                            sb.append("\"");
                        sb.append(item.getName());
                        sb.append("\"");
                    }
                    sb.append(",");
                    sb.append("  \"expanded\": false ");
                    sb.append(",");
                    sb.append(" \"id\": \""+item.getCode()+"\"");//给
  • 添加id此处为code在树中唯一,以后点击节点动态加载时根据此rot=id的值进行查询
                        sb.append(" }"); 
                    }
                }
                sb.append("]");
        return sb.toString();
    }
      javaBean如下:
      public class DemoVo {
        private String code;  //在数据库中唯一
        private String name;
        private String parent; //父节点就是code
       //setter getter 省略
    }

    总结:简单说明一下,treeView 在首次访问的时候会传参数 root 默认值为source,此代码的跟节点,为parent
    在首次访问url后,查询到一级节点,此url被存起来了,再次点击节点,url中多了root参数,
    其值根据点击的
  • 中的id而变,于是便动态加载
    本人邮箱 [email protected]
  • 你可能感兴趣的:(json,jQuery,Spring,Struts,Cache)