juery treeview 动态加载(实现)

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

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

用的struts1.2框架
首先、从页面开始写: html代码如下:
<ul id="back">
</ul>
树将在id为back的位置进行展示。
js代码如下:
<script type="text/javascript">
$(document).ready(function(){
//初始化树
$("#back").treeview({
animated: "fast",
collapsed: true,
unique: true,
persist: "location",
url:"<%=url%>"
});
});

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

最后 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<DemoVo> 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("\"<input type='checkbox' value='");
}else{
sb.append("\"<input type='radio' name='s' value='");
}
sb.append(item.getCode());
sb.append("' />");
sb.append(item.getName());
sb.append("\"");
}
sb.append(",");
sb.append(" \"expanded\": false ");
sb.append(",");
sb.append(" \"id\": \""+item.getCode()+"\"");//给<li>添加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参数,
其值根据点击的<li>中的id而变,于是便动态加载
本人邮箱 jingxiangj@163.com
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值