ExtJS Tree刷新后只选择节点,不展开
实例讲解:通过点击岗位,将岗位对应的模块菜单给展开。
1..先对树进行全面加载(无须获取Path路径了):
moduleloader.on("load",function(treeLoader, node){
//将树面板先展开再关闭,用于将所有子节点显示出来!
module_tree.expandAll(); //注意!此处是将树面板全部展开!!!而不是节点!!!
module_tree.collapseAll();
module_root.expand();//展开根节点
}
注意:
必须全部展开,各级目录下的所有叶子节点才能充分加载完全!若未加载则为“undifined”,无法被勾选。
2.点击岗位获取对应模块菜单ID:
function check(node,checked){
if(checked == true){
//得到岗位对应的功能
Ext.Ajax.request({
url : 'user.up?doType=getModuleById',
params : {postID : node.id},
success : function(response, options) {
checkModuleid = response.responseText;
showCheckModules();
//module_root.reload();
}
});
}
}
结果示例:{03,0302,0305,05,0504}
3.将对应选项进行勾选,但不展开:
function showCheckModules(){
//先清楚所有勾选项
var treeNodes = module_root.childNodes;
for (var i = 0; i < treeNodes.length; i++) {
var id = treeNodes[i].id;
var node = module_tree.getNodeById(id);
node.ui.toggleCheck(false);
}
//再将对应的给勾选上
var ids = checkModuleid?checkModuleid.split(","):null;
if(!ids){//ids为空则返回
return;
}
for (var i = 0; i < ids.length; i++) {
var id = ids[i];
if(id.length == 4){
var node = module_tree.getNodeById(id);//通过id获取节点
node.ui.toggleCheck(true);//选中节点
}
}
}
注意:
1.这种方式必须先把树全部展开一遍,即全部加载一遍,所以Sql查询时必须一次性全查出来
2.刷新后展开的无须一次性全部加载完!
4.加载菜单树:
Servlet:
if("getModuleTree".equals(action)){//得到菜单树
response.setContentType("text/html;charset=UTF-8");
String pid=request.getParameter("pid")==null?"":request.getParameter("pid");
if("module_root_value".equals(pid)){
pid="";
}
String sloadAll=request.getParameter("loadAll");
int loadAll = 1;//注意此处为1时为一次性加载,为0时为分级加载(点击目录才加载)
try{
loadAll=Integer.parseInt(sloadAll);
}catch(Exception e){}
List list = uDao.getModuleList(pid,loadAll);
json = uDao.getTreeNodesOfJson(list, loadAll, pid);
out = response.getWriter();
out.print(json);
out.close();
return;
}
Dao:
public List getModuleList(String pid, int loadAll) {
List list = new ArrayList();
Session s = null;
try {
s = HibernateUtil.getSession();
s.beginTransaction();
StringBuffer sql = new StringBuffer(
"select * from(select moduleid,name,pid,qybj,isleaf from modules t where qybj=1 and enable = 1 start with moduleid in(select moduleid from modules where pid is null) connect by prior moduleid = pid order by dorder)");
if (loadAll == 0) {// 分级加载
if (pid == null || "".equals(pid))
sql.append(" where pid is null ");
else
sql.append(" where pid='").append(pid + "'");
} else {
if (pid != null && !"".equals(pid))
sql.append(" where pid='").append(pid + "'");
}
SQLQuery query = s.createSQLQuery(sql.toString());
List lst = query.list();
if (lst != null && lst.size() > 0) {
for (int i = 0; i < lst.size(); i++) {
Object[] flds = (Object[]) lst.get(i);
UserSimpleBean sBean = new UserSimpleBean();
sBean.setBm((String) flds[0]);
sBean.setMc((String) flds[1]);
sBean.setPid((String) flds[2]);
sBean.setIsLeaf(((BigDecimal) flds[4]).intValue());
list.add(sBean);
}
}
s.getTransaction().commit();
} catch (Throwable e) {
log.error(e.toString());
HibernateUtil.endSession(s);
} finally {
HibernateUtil.endSession(s);
}
return list;
}
Sql语句:
select * from(select moduleid,name,pid,qybj,isleaf from modules t where qybj=1 and enable = 1 start with moduleid in(select moduleid from modules where pid is null) connect by prior moduleid = pid order by dorder)
注意:
分级加载时加上了“where pid = ?”的条件。
图示:
1.点击岗位勾选相应菜单,不展开
2.点击菜单展开:
- 大小: 11.3 KB
- 大小: 4.9 KB
- 大小: 11.7 KB
分享到:
相关推荐
通过ExtJs Tree,用户可以直观地展示数据之间的层级关系,并支持多种交互操作,如展开、折叠节点等。 ### 特性与功能 #### 树形面板(Treepanel) - **自动滚动**:通过`autoScroll`属性设置为`true`,确保当内容...
如果需要在页面刷新后保持用户的展开/折叠状态,可以使用`stateful`配置,并配合`stateId`来保存和恢复状态。 9. **性能优化** 对于大型数据集,可以使用分页和懒加载来提高性能。通过配置`loadMask`可以在数据...
ExtJS Tree 示例是一种基于ExtJS库实现的交互式树形组件,它允许用户在Web应用程序中展示层次结构数据。在本示例中,我们将探讨如何使用ExtJS来创建、访问和操作一个树形结构,特别是在数据库操作方面,如添加和删除...
完美的Extjs4 treePanel节点刷新,函数为自动刷新选中的节点.API看得头疼才别出来的代码.截止我发之前,好像没有谁共享这个功能的函数吧.
其中的Tree组件可以创建具有可展开/折叠节点的多层树结构,常用于组织和展示层次化的数据。在这个示例中,Tree可能被用来展示文件系统、组织架构或者菜单结构。它支持拖放操作、异步加载以及多种节点类型和样式。 2...
4. **AJAX 技术**: 在这个项目中,ExtJS Tree 可能使用 AJAX(Asynchronous JavaScript and XML)技术异步地从服务器获取 JSON 数据,这使得用户无需刷新整个页面就能更新树视图。通过 `Ext.Ajax.request` 或者 `Ext...
AJAX(异步JavaScript和XML)是一种在不刷新整个页面的情况下更新部分网页的技术。在ExtJS中,Ajax被广泛用于与服务器进行通信,如加载和保存数据。在树形视图的上下文中,Ajax可以用来动态地获取和加载树节点的数据...
Ajax(Asynchronous JavaScript and XML)是实现Web应用异步通信的技术,允许在不刷新整个页面的情况下与服务器交换数据并更新部分网页内容。在动态树中,使用Ajax可以实现按需加载,只请求用户当前需要查看的节点...
在对树节点进行操作后往往需要进行reload操作刷新一下树,但是很多业务都需要在树形刷新后默认选中最后一次选中的节点。这样就必须先保存前一次选中节点的信息,在reload之后再次通过节点的信息进行expand逐层展开到...
在ExtJS框架中,`TreePanel`是一种非常实用且功能丰富的UI组件,它允许开发者构建复杂的树形数据结构,并提供了丰富的交互特性,例如拖拽、选择、展开与折叠等功能。相较于其他框架如Easy UI或DhtmlxTree,ExtJS的`...
- `itemexpand` 和 `itemcollapse`: 节点展开或折叠后触发。 4. **API 方法**: - `expandNode`: 手动展开一个节点。 - `collapseNode`: 手动折叠一个节点。 - `getSelectionModel`: 获取选择模型,用于处理...
1. **Tree组件基本概念**:Tree组件用于展示层次结构的数据,类似于操作系统中的文件系统,具有可折叠/展开节点的功能。 2. **节点操作**:创建、添加、删除、移动和更新树节点是常见的操作,可以通过API轻松实现。 ...
ExtJS Combobox Tree,通常被称为Combotree,是ExtJS框架中的一个组件,它结合了下拉列表(Combobox)和树形结构(Tree),提供了一种用户友好的选择方式,尤其适用于展示层级关系的数据。在ExtJS 4.x版本中,这个...
- 示例还提供了增加树节点的功能,删除和修改的操作与之类似,主要涉及更新数据库记录,然后刷新受影响的树节点。 通过以上步骤,我们可以构建一个动态的、基于SSH和ExtJS的树形结构,其中JSON数据作为数据交换...
通过树实现动态加载以及实现添加节点、删除节点、修改节点文本已经通过拖动移动节点等功能。先创建树的表结构:插入以下数据:首先创建基本页面:代码中已包含了样式、ExtJS的脚本文件和语言包。其实bootstrap.js会...
ExtJS的树组件支持这种加载方式,只在需要时请求服务器获取节点数据。 接下来,我们关注树形结构(Tree)。在ExtJS中,树是一种可扩展的数据结构,用于展示层次关系的数据。每个节点可以有子节点,形成一个层级结构...
10.树状结构可以选择出现在某一列,不一定要在第一列 11.支持theme,纯css定制表格树,可以自由定制theme,包括图标/节点大小等 12.表格树从右到左显示 13.本地节点搜索,服务器端节点搜索(未实现待完成) 14.无变化重新...
- **Expanding and Collapsing**:节点可以展开或折叠,显示或隐藏子节点。 - **Tree Column**:特有列类型,用于显示和操作树形结构的节点。 4. **数据加载和交互**: - **Ajax Loading**:通过Ajax异步加载...
TreeStore的proxy用于获取和存储数据,加载节点可以调用`treeStore.load({node: 节点})`或`treeStore.reload({node: 节点})`,前者从根节点开始刷新,后者重新加载最近加载的节点。 实现多选功能,可以在Model定义...
树状结构可以选择出现在某一列,不一定要在第一列 11.支持theme,纯css定制表格树,可以自由定制theme,包括图标/节点大小等 12.表格树从右到左显示 13.本地节点搜索,服务器端节点搜索(未实现待完成) 14.无变化...