Extjs3.2+Json lib动态树与GridPanel简单展现
2010-12-30 13:36
369 查看
最近项目中要用到Extjs,网上搜了写文档看了之后,写了个小Demo。
Demo描述:
将部门信息用树展示出来,点击树节点的某个部门之后,弹出一个窗口,该窗口中展示这个部门中员工的列表。
首先,到http://www.sencha.com/products/js/download.php下载Extjs3.2的发布包,因为要用到json lib,所以还要到http://sourceforge.net/projects/json-lib/files/json-lib/下载json
lib。
mysql数据库脚本:
EmpModel.java:
PageModel.java,用于分页的模型:
empProcessor.jsp:
在浏览器中输入 http://127.0.0.1:8080/Extjs/tree.jsp 测试,效果如下:
哈哈,很简单吧。。。
Demo描述:
将部门信息用树展示出来,点击树节点的某个部门之后,弹出一个窗口,该窗口中展示这个部门中员工的列表。
首先,到http://www.sencha.com/products/js/download.php下载Extjs3.2的发布包,因为要用到json lib,所以还要到http://sourceforge.net/projects/json-lib/files/json-lib/下载json
lib。
mysql数据库脚本:
public class DeptModel { private int deptno; private String deptname; private int parentno; ... }
EmpModel.java:
public class TreeModel { private int id; private String text; private boolean leaf; private List<TreeModel> children = new ArrayList<TreeModel>(0); public TreeModel(){ } /** * 根据部门列表获取形如 [{id:"",text:"",leaf:,children:[]},{...},...]的JSON字符串 * @param models 部门列表List<DeptModel> * @return JSON格式的字符串,用于生成ext树 */ public String getJsonTreeModelString(List<DeptModel> models){ List<TreeModel> lst = new ArrayList<TreeModel>(0); for(DeptModel dm : models){ if(dm.getParentno()==0){ TreeModel root = new TreeModel(); root.setId(dm.getDeptno()); root.setText(dm.getDeptname()); List<TreeModel> children = getChildren(models,root); //递归获取子集 if(children.size()>0){ root.setLeaf(false); root.setChildren(children); }else{ root.setLeaf(true); root.setChildren(new ArrayList<TreeModel>(0)); } lst.add(root); } } JsonConfig config = new JsonConfig(); config.setExcludes(new String[]{"models"}); config.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT); return JSONArray.fromObject(lst,config).toString(); } /** * 递归获取节点的子集的方法 * @param models 部门列表 * @param parentModel 根节点,即deptno=0的根节点部门 * @return List<TreeModel> 树模型列表 */ public List<TreeModel> getChildren(List<DeptModel> models,TreeModel parentModel){ List<TreeModel> lst = new ArrayList<TreeModel>(0); for(DeptModel dm : models){ if(parentModel.getId() == dm.getParentno()){ TreeModel tm = new TreeModel(); tm.setId(dm.getDeptno()); tm.setText(dm.getDeptname()); List<TreeModel> children = getChildren(models,tm); if(children.size()>0){ tm.setLeaf(false); tm.setChildren(children); }else{ tm.setLeaf(true); tm.setChildren(new ArrayList<TreeModel>(0)); } lst.add(tm); } } return lst; } //省略getter,setter方法... }
PageModel.java,用于分页的模型:
<%@ page language="java" pageEncoding="UTF-8"%> <%@ page import="com.model.TreeModel" %> <%@ page import="com.model.DeptModel" %> <%@ page import="java.sql.*,java.util.*" %> <% Class.forName("com.mysql.jdbc.Driver"); java.sql.Connection conn = java.sql.DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","root"); PreparedStatement pstmt = conn.prepareStatement("select * from dept"); ResultSet rs = pstmt.executeQuery(); List<DeptModel> models = new ArrayList<DeptModel>(); while(rs.next()){ DeptModel model = new DeptModel(); model.setDeptno(rs.getInt("deptno")); model.setDeptname(rs.getString("deptname")); model.setParentno(rs.getInt("parentno")); models.add(model); } String jsonTreeModelString = new TreeModel().getJsonTreeModelString(models); out.println(jsonTreeModelString); %>
empProcessor.jsp:
<%@ page language="java" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Extjs Tree Demo</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <link rel="stylesheet" type="text/css" href="js/extjs/resources/css/ext-all.css" mce_href="js/extjs/resources/css/ext-all.css" /> <mce:script src="js/extjs/adapter/ext/ext-base.js" mce_src="js/extjs/adapter/ext/ext-base.js"></mce:script> <mce:script src="js/extjs/ext-all.js" mce_src="js/extjs/ext-all.js"></mce:script> <mce:script src="js/extjs/ext-lang-zh_CN.js" mce_src="js/extjs/ext-lang-zh_CN.js"></mce:script> <mce:script type="text/javascript"><!-- Ext.onReady(function(){ //生成部门树结构 var treeLoader = new Ext.tree.TreeLoader({ dataUrl:"deptProcessor.jsp" }); var rootNode = new Ext.tree.AsyncTreeNode({ text: '所有部门' }); var tree = new Ext.tree.TreePanel({ renderTo:'treecontainer', loader: treeLoader, root: rootNode, width:200, height:300, listeners:{ click:showEmps } }); tree.expandAll(); }); //点击部门节点后的事件处理 function showEmps(n){ var deptno = n.attributes.id; var deptname = n.attributes.text; var win = new Ext.Window({ title:deptname, width:500, height:300 }); var dataProxy = new Ext.data.HttpProxy({ url:"empProcessor.jsp?deptno="+deptno }); var reader = new Ext.data.JsonReader({totalProperty:"total",root:"lst"},[ "empno","empname","gender","job","deptno" ]); var store = new Ext.data.Store({ proxy:dataProxy, reader:reader }); store.load({params:{start:0,limit:5}}); var columnModel = new Ext.grid.ColumnModel([ {header:"编号",width:100,dataIndex:"empno"}, {header:"姓名",width:120,dataIndex:"empname"}, {header:"性别",width:100,dataIndex:"gender"}, {header:"职位",width:100,dataIndex:"job"} ]); //分页 var pageBar = new Ext.PagingToolbar({ store:store, pageSize:5, displayInfo:true, displayMsg:"当前为{0}-{1}条,共{2}条", emptyMsg:"没有记录" }); var gridPanel = new Ext.grid.GridPanel({ width:480, autoHeight:true, cm:columnModel, store:store, bbar:pageBar }); win.add(gridPanel); win.show(Ext.getBody()); } // --></mce:script> </head> <body style="padding:30px 20px" mce_style="padding:30px 20px"> <div id="treecontainer" style="height:300px; width:200px;"></div> </body> </html>
在浏览器中输入 http://127.0.0.1:8080/Extjs/tree.jsp 测试,效果如下:
哈哈,很简单吧。。。
相关文章推荐
- ExtJS EditorGridPanel 示例之JSON格式Store前后台增删改查
- Extjs GridPanel使用攻略简单教程
- ExtJS EditorGridPanel 示例之JSON格式Store前后台增删改查
- ExtJs GridPanel简单的增删改实现代码
- extjs grid 从json 获取动态列
- ExtJs之GridPanel综合操作(一)——异步获取Json数据并显示
- ExtJS GridPanel动态加载列
- EXTJS 4 Json nested data in grid panel
- ExtJs动态生成treepanel的Json格式
- ExtJs动态生成treepanel的Json格式
- EXTJS动态设置GridPanel高度
- ExtJs GridPanel动态生成表单
- ExtJS GridPanel动态加载列
- Extjs 4 tabpanel动态加载reconfigure的grid
- 与ASP.NET服务器端结合返回JSON数据实现ExtJS GridPanel客户端分页
- EXTJS学习系列提高篇:第一篇(转载)作者殷良胜,用EXT2.2+vs.2008.net+C#动态生成GridPanel
- Extjs gridpanel 动态修改store内容
- Extjs3.2 grid简单例子1
- ExtJs动态生成treepanel的Json格式
- ExtJs GridPanel Column 自动换行