1、Action后台java代码
/**
* 显示树形 【left左边的导航】
* @param mapping
* @param form
* @param request
* @param response
* @return
* @throws IOException
*/
public ActionForward showTreeNode(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) throws IOException {
List<Menu> menulist = new ArrayList<Menu>();
//Menu zonemenu = null;
//区域
List<ZoneInfo> zoneList = zoneInfoService.getZoneInfoList();
for (ZoneInfo zone : zoneList) {
Menu zonemenu = new Menu();
zonemenu.setId("zone"+zone.getZoneId());
zonemenu.setText(zone.getZoneName());
List<MerchantInfo> merchanglist = merchantInfoService.getMerchantInfoByZoneID(zone.getZoneId());//根据区域ID显示商户
if(merchanglist.size()>0)
{
zonemenu.setLeaf(false);
List<Menu> merchantlistmenu = new ArrayList<Menu>();
zonemenu.setChildren(merchantlistmenu);//区域添加商户
for (MerchantInfo merchant : merchanglist) {
Menu merchantmenu = new Menu();
merchantmenu.setId("merchant"+merchant.getId());
merchantmenu.setText(merchant.getMerchantForShort());
List<StoreInfo> storeinfo = merchantInfoService.getStoreInfoByMerchantID(merchant.getId());//根据商户id得到门店
if(storeinfo.size()>0)
{
merchantmenu.setLeaf(false);
List<Menu> storelistmenu = new ArrayList<Menu>();
merchantmenu.setChildren(storelistmenu);//商户添加门店
for (StoreInfo store : storeinfo) {
Menu storemenu = new Menu();
storemenu.setId("store"+store.getId());
storemenu.setText(store.getStoreForShort());
List<StationInfo> stationlist = stationInfoService.getStationInfoByStoreID(store.getId());//根据门店ID得到站点
if(stationlist.size()>0)
{
storemenu.setLeaf(false);
List<Menu> stationlistmenu = new ArrayList<Menu>();
storemenu.setChildren(stationlistmenu);//门店添加站点
for (StationInfo station : stationlist) {
Menu stationmenu = new Menu();
stationmenu.setId("station"+station.getId());
stationmenu.setText(station.getStationCode());
stationmenu.setLeaf(true);
stationlistmenu.add(stationmenu);
}
}else{
storemenu.setLeaf(true);
}
storelistmenu.add(storemenu);
}
}else{
merchantmenu.setLeaf(true);
}
merchantlistmenu.add(merchantmenu);
}
}else{
zonemenu.setLeaf(true);
}
menulist.add(zonemenu);
}
JSONArray json = JSONArray.fromObject(menulist);
response.getWriter().print(json.toString());
return null;
}
2、Menu.class类
package com.ntouch.general;
import java.util.List;
public class Menu {
private String id;
private String text;
private boolean leaf;
//private String cls;
private List<Menu> children;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public boolean isLeaf() {
return leaf;
}
public void setLeaf(boolean leaf) {
this.leaf = leaf;
}
public List<Menu> getChildren() {
return children;
}
public void setChildren(List<Menu> children) {
this.children = children;
}
}
3、index.jsp中的部分Ext脚本代码
/*树加载*/
var root = new Ext.tree.AsyncTreeNode({
id:'0',
text:'区域',
leaf:false
});
var data=new Ext.tree.TreeLoader({url:'zone.do?op=showTreeNode'});
var tree = new Ext.tree.TreePanel({
root:root,
title:'结构组织',
region:'west',
split:true,//可调
collapsible:true,//隐藏显示
loader:data,
useArrows:true,
autoScroll:true,
width:180,
minSize:160,
maxSize:300,
animate:true,//开启动画效果
enableDD:false,//不允许子节点拖动
border:false,//有边框
lines:true,
rootVisible:true //设为false,将隐藏root根节点
});
data.on('beforeload',function(treeLoader,node){
this.baseParams.id=node.attributes.id;
},data);
root.expand(true,true);
分享到:
相关推荐
7. **异步与同步加载**:EXT树支持异步和同步两种加载方式。异步加载更常见,它在后台进行,不会阻塞用户界面。同步加载则会等待数据加载完成后再更新界面,一般只在数据量较小或有特定需求时使用。 8. **优化技巧*...
1. **树的数据源**:EXT.NET的树形控件可以通过两种方式加载数据:同步加载(Synchronous)和异步加载(Asynchronous)。同步加载是在页面加载时一次性加载所有节点,适用于数据量较小的情况。而异步加载则在用户...
7. **数据绑定**:复选框树的数据通常来源于后端服务,通过`Store`进行加载和同步。当节点的复选框状态改变时,可以使用`Store`的`sync()`方法将更改同步回服务器。 8. **自定义渲染**:开发者还可以通过重写`...
3. TreeStore:与Grid的Store类似,Tree也有自己的数据存储类TreeStore,它负责加载、管理和同步树节点数据。树数据可以从JSON、XML或自定义的服务器响应中获取。 4. 异步加载(Lazy Loading):EXT Tree支持延迟...
TreePanel是EXT中用于展示树状结构数据的核心组件,它可以动态加载数据并提供多种交互方式。创建一个动态树的第一步是实例化一个TreePanel,并配置其属性,如根节点、数据源以及节点的渲染样式等。 ```javascript ...
动态树的核心在于能够根据需要加载和更新数据,而不是一次性加载所有节点,这样可以提高应用性能。 1. **动态生成树** 动态生成树通常涉及以下步骤: - 首先,创建一个`Ext.tree.Panel`实例,设置基本配置,如`...
通过`loader`配置项,我们可以指定加载树数据的URL和方法。在控制选择和撤销时,可能需要更新服务器端的状态,以保持同步。 5. **JS文件直接调用**:描述中的“js文件可以直接调用”意味着提供的代码资源可能包含了...
树加载器负责加载树结构的数据。它可以是同步加载或异步加载。在上面的示例中,`TreeLoader` 从 `data.json` 文件加载数据。 ##### 5.4 自定义 `TreeLoader` 对于更复杂的需求,可以自定义 `TreeLoader` 的行为。...
现在我们来详细探讨如何利用ZTree和DWR实现异步加载树形菜单。 首先,ZTree是一个轻量级、灵活的jQuery插件,适用于构建可自定义的树形菜单。它支持多种操作,如点击节点、拖拽节点、右键菜单等,且提供了丰富的API...
EXT Tree的配置项也是相当丰富的,例如,你可以定制加载数据的方式(异步或同步)、节点的展开/折叠行为、节点的渲染样式等。例如,你可能需要设置`rootVisible: false`来隐藏根节点,或者使用`loadMask: true`为树...
这意味着你需要确保你的开发环境中已经正确设置了ExtJS库的路径,否则页面可能无法正常加载和运行。 实现拖拽树和表格之间的功能是一个涉及多个组件和事件处理的复杂过程。通过理解ExtJS的DD API和正确配置Tree与...
在EXT JS应用系统中,智能树形菜单是一种常见的交互组件,它允许用户通过层次结构来组织和导航数据。本文将深入探讨如何利用加权双历树(Weighted Bi-Layer Tree,WBLT)实现这样的功能,以及EXT JS库中的相关技术。...
Store组件可以处理数据的加载、刷新和同步,与服务器进行数据交换。 9. **皮肤和主题**:EXT支持多主题,允许开发者通过CSS改变应用的整体外观,实现界面风格的个性化。 10. **国际化支持**:"ext中文帮助文档最终...
EXT 3.3 中包含了许多关键组件和功能,如表格、树形视图、图表、菜单、按钮、表单元素等,这些组件可以用来创建复杂的用户界面。EXT 3.3 提供了高度可定制化和丰富的API,使得开发者可以根据需求调整组件的样式和...
只为了树也要学ext。 3.1. 真的,我是为了树,才开始学ext的。 3.2. 传统是先做出一棵树来。 3.3. 超越一个根 3.4. 对tree进行统一配置 3.5. 这种装配树节点的形式,真是让人头大。 3.5.1. TreeLoader外传 之 ...
3. **模型(Model)和存储(Store)**:EXT JS使用数据模型(TreeModel)来定义节点的结构,而存储(TreeStore)负责管理数据,处理数据的加载、更新和同步。 4. **渲染器(Renderer)**:通过定义`renderer`函数,...
2. **EXT Tree**: 树形视图(EXT Tree)是EXT JS中另一种重要的数据展示方式,适合展现层次结构的数据。在这个应用中,树可能被用来表示具有层级关系的数据,例如目录结构或组织架构。同样,数据也是动态从数据库...
- 其中`TreeStore`负责加载树形结构的数据,而`JsonStore`则负责加载分页后的表格数据。 #### 三、具体实现步骤 1. **定义自定义序号类**: - 通过继承`Ext.grid.RowNumberer`类来自定义一个名为`Ext.grid....
2. **组件系统**:EXT的核心是其组件系统,包括按钮、面板、表格、树视图、菜单、工具提示等。示例将展示如何创建和使用这些组件,以及如何自定义它们的外观和行为。 3. **数据绑定**:EXT支持双向数据绑定,允许...