ExtJS4 动态加载TreePanel的问题

问题描述

前台代码 : store : Ext.create('Ext.data.TreeStore', {root : {id : '00',text : '民星兽药',expanded : true//nodeType : 'async'},proxy : { autoLoad:true,type : 'ajax',url : ctxpath + '/SystemManager/TreeList',reader : {type : 'json',root : 'alltrees'}Action:@Overridepublic String execute() throws Exception {ActionContext actionContext = ActionContext.getContext(); // 取到struts容器Map session = actionContext.getSession(); // 取得sessionUser user = (User) session.get("user");try {alltrees = userServices.listTrees(user.getUsername());for(int i=0;i<alltrees.size();i++){System.out.println(alltrees.get(i).getText());}} catch (Exception e) {e.printStackTrace();}// this.success = true;return SUCCESS;}listTrees对应的业务方法:public List<Menu> listTrees(String username) throws Exception {List<Menu> menus = new ArrayList<Menu>();Connection conn = null;PreparedStatement ps = null;ResultSet rs = null;String sql = "select a.pk_archives,a.archivesname,a.url_name,a.cls,a.leaf,a.pid from drug_user u join drug_role r "+ "on u.role_id = r.limit_id join drug_limit l on r.limit_id = l.role_code "+ "join drug_archives a on l.archives_id = a.limit_id where u.username = ?";try {conn = DBUtil.getConnection();ps = conn.prepareStatement(sql);ps.setString(1, username);rs = ps.executeQuery();while (rs.next()) {Menu menu = new Menu();menu.setId(rs.getString("pk_archives"));menu.setText(rs.getString("archivesname"));menu.setUrl(rs.getString("url_name"));menu.setCls(rs.getString("cls"));menu.setLeaf(Boolean.parseBoolean(rs.getString("leaf")));menu.setParentId(rs.getString("pid"));menus.add(menu);}} catch (Exception e) {e.printStackTrace();} finally {rs.close();ps.close();conn.close();}//System.out.println(menus.size());List<Menu> result = new ArrayList<Menu>();if (menus != null && menus.size() > 0) {for (int i = 0; i < menus.size(); i++) {String id = menus.get(i).getId();for (int j = 0; j < menus.size(); j++) {if (id.equals(menus.get(j).getParentId())) {menus.get(i).getChildren().add(menus.get(j));menus.get(j).setExpanded(true);}}}for (int k = 0; k < menus.size(); k++) {if ("00".equals(menus.get(k).getParentId())) {result.add(menus.get(k));}}}return result;}前台后太都没报错; 谷歌浏览器截取到返回页面的数据:{"alltrees":[{"children":[{"children":[],"cls":"file","expanded":true,"id":"100221","leaf":true,"parentId":"100200","text":"叶子一","url":"/veterinaryDrug/SystemManager/RoleList"}],"cls":"folder","expanded":false,"id":"100200","leaf":false,"parentId":"00","text":"系统管理","url":null},{"children":[],"cls":"folder","expanded":false,"id":"100201","leaf":false,"parentId":"00","text":"销售","url":null}]}现象如图;还有一个问题:为啥登录进来后程序会加载两次treeStore??

解决方案

应该多贴点前端js代码 , 后端java只要返回json字符串即可可以参考下地址 [url]https://gist.github.com/x03570227/2994798[/url]至于请求两次, 可以是你自己autoload一次还有看看其他有没有reload或者tree里面的 expand展开事件处理

时间: 2024-09-12 01:39:59

ExtJS4 动态加载TreePanel的问题的相关文章

Extjs4动态加载Panel内的组件实例

该示例基于Extjs 4.0.7版本. 像下面的代码所示,假如已经有一个Panel组件,然后我们希望这个form类型的Panel能够动态的加载显示不同的Display组件. 1. Web端代码 下面的代码截取关键部分显示:  代码如下 复制代码 }, {     region: 'west',     id: 'overviewPropertyPanel',     xtype: 'form',     margins: '0 5 0 0',     bodyPadding: 10,     w

javascript中动态加载js文件多种解决办法

一个比较全部在动态加方法  代码如下 复制代码 /*     动态加载js v1.0 by:dum 2012-03-17 www.111cn.net     用法:src="webJsBase.js?load=a,b"     注:加载本目录下js */ var webJsBase = {     require: function(libraryName) {         document.write('<script type="text/javascript&

Extjs4使用mvc模式,封装Store层的ArrayStore无法动态加载后台数据

问题描述 Extjs4使用mvc模式,封装Store层的ArrayStore无法动态加载后台数据 store层代码 Ext.define('Desktop.store.function.FunctionStore'{ extend: 'Ext.data.ArrayStore' requires:['Desktop.model.function.UserModel'] model: 'Desktop.model.function.UserModel' autoLoad: true proxy:{

ExtJS4 组件化编程,动态加载,面向对象,Direct_extjs

ExtJS4推荐定义类的时候均使用Ext.define,利用xtype动态加载 修改了以前的一个登陆窗口,感觉用官方推荐的方法还是很不错的 但还有一些问题没有想得非常清楚,先把代码贴出来一起研究下.请看代码中的注释~~ 使用Ext+.Net,用Direct模式传递数据 Default.aspx: 复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3

extjs在动态加载的时候,数据冲掉了

问题描述 extjs在动态加载的时候,数据冲掉了 leftRender:function(p){ var ii=0; for(var i=0;i<3;i++){ var panel = Ext.create( 'Ext.panel.Panel', { id: 'temp_id_'+i, title: 'temp_title_'+i, border: false, layout: 'fit', listeners: { beforerender: function (p2, animate, eO

sqlserver-EXTJS动态加载树,后台JSP,为什么报错NO DATA FOUND呢?代码在下,多谢了!

问题描述 EXTJS动态加载树,后台JSP,为什么报错NO DATA FOUND呢?代码在下,多谢了! 代码:LoadTree.html test3 <script type="text/javascript"> var tree = new Ext.tree.TreePanel({ loader : new Ext.tree.TreeLoader({ dataUrl : 'tree.jsp?Did=00001' }), border : false, root : new

Treegrid的动态加载实例代码_jquery

废话不多说了,直接给大家贴代码了. 具体代码如下所示: 1.前端 <%@ page language="java" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%> <script type="text/javascript"> $(function() { $('#goods_type_treegrid').treegrid({

Extjs入门之动态加载树代码_extjs

Extjs动态加载树,首先在数据库里面设计存放树信息的表 复制代码 代码如下: USE [KimiExtjs] GO /****** 对象: Table [dbo].[Trees] 脚本日期: 04/08/2010 22:12:25 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo].[Trees]( [Tid] [varchar](40) COLLA

ExtJs 4.2.1 复选框数据项动态加载(更新一下)

最近在做博客项目,后台管理用的是ExtJs4.2.1版本,因为是初学所以在使用的时候也遇到不少的这样或那样的问题,也写了不少这方面的博客,今天要写的博客是关于复选框数据项动态的加载功能,以前也没用过,初次用,不知道怎么动态加载,静态加载很容易,添加itmes就可以了,于是我在网上找找有关这方面的博客,找到一篇,不过遗憾的是,这种方法太糟糕了,不是很方便,于是找到了一个很好的解决方法:   //点击编辑弹出的formpanel var formPanel = new Ext.FormPanel({