Ext复合树

项目中要用一个复合树,对叶子节点需要能够进行复选,对于根或枝节点为了不需要复选框,也没去找其它办法,自己想了一个,也许不是很好,仅为给自己记一事吧,以后有时间再深入研究一下,看有没有更好的办法了。
总体思路是这样的,前台JS的代码跟平常的Ext树没有任何差别,差别在后台给前台数据的时候控制节点有没有复选框,控制方法就是作用类继续机制,叶子节点为子类型扩展普通节点,子类添加了一个属性checked,这样它就会有一个复选框了,设置为true即为选中状态。
Action方法:其中代码并不优美

public ActionForward setStamp(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response){
try {
final String parentID = request.getParameter("node").trim();
IStampService stampService = getStampService();
List<Stamp> subStamps = stampService.getByParentId(Long.valueOf(parentID));
List<TreeNodeBean> ts = new ArrayList<TreeNodeBean>();
boolean b = false;
for(Stamp s:subStamps){
//判断是不是叶子节点
b = stampService.isLeaf(s);
TreeNodeBean t;
if(b){
//是叶子节点就构造子类
t = new ComplexCheckTreeNodeBean();
boolean bb = eventStampService.isChecked(s.getId(), eventDetailId);
((ComplexCheckTreeNodeBean)t).setChecked(bb);
}else{
t = new TreeNodeBean();
}
//设置节点值
t.setId(s.getId());
t.setText(s.getStampName());
t.setLeaf(b);
ts.add(t);

}
//用的是JSON-lib生成JSON数据
JSONArray json = JSONArray.fromObject(ts);
response.setBufferSize(1024*10);
response.setContentType("text/json;charset=utf-8");
response.getWriter().write(json.toString());
response.flushBuffer();
getLogger().debug(json.toString());
return null;
} catch (NumberFormatException e) {
e.printStackTrace();
} catch (ServiceException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}

页面JS代码:


[/coExt.onReady(function(){
Ext.SSL_SECURE_URL = "../ext/resources/images/default/s.gif";
Ext.BLANK_IMAGE_URL = "../ext/resources/images/default/s.gif";
tree = new Ext.tree.TreePanel({
el:"stamptree",
autoHeight:false,
autoWidth:false,
rootVisible:true,
title:'标签管理',
useArrows:true,
autoScroll:true,
animate:true,
enableDD:true,
containerScroll:true,
border:false,
loader:new Ext.tree.TreeLoader({
dataUrl:"../stamp/stamp.do?method=setStamp“
})
});
var root = new Ext.tree.AsyncTreeNode({
id:1,
text:"根",
qtip:"根标签",
allowDrag:false,
allowDrop:false
});
tree.setRootNode(root);
tree.render();
root.expand();
});

自己把代码一贴上来这样一看觉得代码还真乱,有待学习和进步。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值