`
caolilfs
  • 浏览: 5166 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

Extjs Tree + JSON + Struts2例子1

    博客分类:
  • Java
阅读更多
核心提示:最近尝试用 extjs来展示树状菜单。着实花了一番功夫。树状菜单的菜单项需要动态加载,而目前版本的extjs中只支持JSON格式的数据。查了一些资料,决定使 用struts2的json-plugin。首先按照例子做了一个,但是结果就是不成功,界面上只出来了一个js中生成的root

最 近尝试用extjs来展示树状菜单。着实花了一番功夫。树状菜单的菜单项需要动态加载,而目前版本的extjs中只支持JSON格式的数据。查了一些资 料,决定使用struts2的json-plugin。首先按照例子做了一个,但是结果就是不成功,界面上只出来了一个js中生成的root节点,不能加 载从后台生成的数据。研究后发现是数据格式有问题。使用json-plugin生成的数据格式如下:

  1. { "cls" : "folder" , "id" :10, "leaf" : false , "children" :[{ "cls" : "file" , "id" :11, "leaf" : true , "children" : null , "text" : "S600" },{ "cls" : "file" , "id" :12, "leaf" : true , "children" : null , "text" : "SLK200" }], "text" : "Benz" }  

而extjs需要的数据格式如下:

  1. [{ "cls" : "folder" , "id" :10, "leaf" : false , "children" :[{ "cls" : "file" , "id" :11, "leaf" : true , "children" : null , "text" : "S600" },{ "cls" : "file" , "id" :12, "leaf" : true , "children" : null , "text" : "SLK200" }], "text" : "Benz" }]  

区别很小,就只相差最外面的两个方括号。但是少了这两个方括号,在json中,含义迥然不同,前者表示一个对象,而后者表示一个数组。而extjs 中 tree的dataloader需要的数据必须是一个数组。而这样的数据格式是json-plugin自动生成的,无法改变。所以,我最后放弃了json -plugin,转而使用json-lib来解决这个问题。
1. 下载json-lib, http://json-lib.sourceforge.net/
2. lib目录下的jar文件清单:
commons-beanutils-1.7.0.jar
commons-collections-3.2.jar
commons-digester-1.6.jar
commons-lang-2.3.jar
commons-logging-1.1.jar
dom4j-1.6.1.jar
ezmorph-1.0.4.jar
freemarker-2.3.8.jar
javassist-3.8.1.jar
json-lib-2.2.1-jdk15.jar
log4j-1.2.13.jar
ognl-2.6.11.jar
struts2-core-2.0.11.jar
xml-apis-1.0.b2.jar
xwork-2.0.4.jar


首先配置web.xml

  1. <? xml   version = "1.0"   encoding = "UTF-8" ?>   
  2. < web-app   version = "2.4"   xmlns = "http://java.sun.com/xml/ns/j2ee"   
  3.    xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"   
  4.    xsi:schemaLocation ="http://java.sun.com/xml/ns/j2ee   
  5.     http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" >   
  6.    < welcome-file-list >   
  7.      < welcome-file > index.jsp </ welcome-file >   
  8.    </ welcome-file-list >   
  9.    < filter >   
  10.      < filter-name > struts2 </ filter-name >   
  11.      < filter-class > org.apache.struts2.dispatcher.FilterDispatcher </ filter-class >   
  12.    </ filter >   
  13.   
  14.    < filter-mapping >   
  15.      < filter-name > struts2 </ filter-name >   
  16.      < url-pattern > /* </ url-pattern >   
  17.    </ filter-mapping >   
  18. </ web-app >   
  19.   

然后是struts.xml

  1. <? xml   version = "1.0"   encoding = "UTF-8" ?>   
  2. <!DOCTYPE struts PUBLIC   
  3.     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"   
  4.     "http://struts.apache.org/dtds/struts-2.0.dtd" >   
  5.       
  6. < struts >   
  7.      < constant   name = "struts.devMode"   value = "true" />   
  8.      < constant   name = "struts.i18n.encoding"   value = "UTF-8" />   
  9.      < package   name = "person"   extends = "struts-default" >   
  10.          < action   name = "menus"   method = "execute"   class = "com.lab.MenuAction" >   
  11.              < result > /menu.jsp </ result >   
  12.          </ action >   
  13.      </ package >   
  14. </ struts >   

3. 树的节点模型(省略了getter,setter)

  1. public class Menu {   
  2.     private int id;   
  3.     private String text;   
  4.     private boolean leaf;   
  5.     private String cls;   
  6.     private List < Menu >  children;   
  7. }   

4. action

  1. package  com.lab;   
  2.   
  3. import  java.util.ArrayList;   
  4. import  java.util.List;   
  5.   
  6. import  net.sf.json.JSONArray;   
  7.   
  8. public   class  MenuAction {   
  9.      private  String menuString;   
  10.       
  11.      private  List<Menu> menus;   
  12.       
  13.      public  String execute() {   
  14.   
  15.         menus =  new  ArrayList<Menu>();   
  16.           
  17.         Menu benz =  new  Menu();   
  18.         benz.setText( "Benz" );   
  19.         benz.setCls( "folder" );   
  20.         benz.setLeaf( false );   
  21.         benz.setId( 10 );   
  22.         menus.add(benz);   
  23.           
  24.         List<Menu> benzList =  new  ArrayList<Menu>();   
  25.         benz.setChildren(benzList);   
  26.           
  27.         Menu menu;   
  28.         menu =  new  Menu();   
  29.         menu.setText( "S600" );   
  30.         menu.setCls( "file" );   
  31.         menu.setLeaf( true );   
  32.         menu.setId( 11 );   
  33.         benzList.add(menu);   
  34.         menu =  new  Menu();   
  35.         menu.setText( "SLK200" );   
  36.         menu.setCls( "file" );   
  37.         menu.setLeaf( true );   
  38.         menu.setId( 12 );   
  39.         benzList.add(menu);   
  40.           
  41.         Menu bmw =  new  Menu();   
  42.         bmw.setText( "BMW" );   
  43.         bmw.setCls( "folder" );   
  44.         bmw.setLeaf( false );   
  45.         bmw.setId( 20 );   
  46.         menus.add(bmw);   
  47.           
  48.         List<Menu> bmwList =  new  ArrayList<Menu>();   
  49.         bmw.setChildren(bmwList);   
  50.           
  51.         menu =  new  Menu();   
  52.         menu.setText( "325i" );   
  53.         menu.setCls( "file" );   
  54.         menu.setLeaf( true );   
  55.         menu.setId( 21 );   
  56.         bmwList.add(menu);   
  57.           
  58.         menu =  new  Menu();   
  59.         menu.setText( "X5" );   
  60.         menu.setCls( "file" );   
  61.         menu.setLeaf( true );   
  62.         menu.setId( 22 );   
  63.         bmwList.add(menu);   
  64.           
  65.         JSONArray jsonObject = JSONArray.fromObject(menus);   
  66.          try  {   
  67.             menuString = jsonObject.toString();   
  68.         }  catch  (Exception e) {   
  69.             menuString =  "ss" ;   
  70.         }   
  71.   
  72.          return   "success" ;   
  73.     }   
  74.   
  75.      public  String getMenuString() {   
  76.          return  menuString;   
  77.     }   
  78.   
  79.      public   void  setMenuString(String menuString) {   
  80.          this .menuString = menuString;   
  81.     }   
  82. }   
  83.   

5. menu.jsp

  1. < %@ taglib  prefix = "s"   uri = "/struts-tags"  % >   
  2. < s:property   value = "menuString"   escape = "false" />   

6. html页面和js
我使用的就是extjs的example中的reorder.html和reorder.js,更改了reorder.js中treeloader的dataurl: menus.action

  1. < html >   
  2. < head >   
  3. < meta   http-equiv = "Content-Type"   content = "text/html; charset=iso-8859-1" >   
  4. < title > Reorder TreePanel </ title >   
  5. < link   rel = "stylesheet"   type = "text/css"   href = "extjs/resources/css/ext-all.css"   />   
  6.   
  7.      <!-- GC -->   
  8.       <!-- LIBS -->   
  9.       < script   type = "text/javascript"   src = "extjs/adapter/ext/ext-base.js" > </ script >   
  10.       <!-- ENDLIBS -->   
  11.     
  12.      < script   type = "text/javascript"   src = "extjs/ext-all.js" > </ script >   
  13. < script   type = "text/javascript"   src = "reorder.js" > </ script >   
  14.   
  15. <!-- Common Styles for the examples -->   
  16. < link   rel = "stylesheet"   type = "text/css"   href = "extjs/resources/css/example.css"   />   
  17. </ head >   
  18. < body >   
  19. < script   type = "text/javascript"   src = "../examples.js" > </ script > <!-- EXAMPLES -->   
  20. < h1 > Drag and Drop ordering in a TreePanel </ h1 >   
  21. < p > This example shows basic drag and drop node moving in a tree. In this implementation there are no restrictions and    
  22. anything can be dropped anywhere except appending to nodes marked "leaf" (the files).  < br > </ p >   
  23. < p > Drag along the edge of the tree to trigger auto scrolling while performing a drag and drop. </ p >   
  24. < p > In order to demonstrate drag and drop insertion points, sorting was  < b > not </ b >  enabled. </ p >   
  25. < p > The data for this tree is asynchronously loaded with a JSON TreeLoader. </ p >   
  26. < p > The js is not minified so it is readable. See  < a   href = "reorder.js" > reorder.js </ a > . </ p >   
  27.   
  28. < div   id = "tree-div"   style = "overflow:auto; height:300px;width:250px;border:1px solid #c3daf9;" > </ div >   
  29.   
  30. </ body >   
  31. </ html >   
  32.   


js:

  1. /*  
  2.  * Ext JS Library 2.0.1  
  3.  * Copyright(c) 2006-2008, Ext JS, LLC.  
  4.  * licensing@extjs.com  
  5.  *  
  6.  * http://extjs.com/license  
  7.  */   
  8.   
  9. Ext.onReady( function (){   
  10.      // shorthand   
  11.      var  Tree = Ext.tree;   
  12.       
  13.      var  tree =  new  Tree.TreePanel({   
  14.         el: 'tree-div' ,   
  15.         autoScroll: true ,   
  16.         animate: true ,   
  17.         enableDD: true ,   
  18.         containerScroll:  true ,   
  19.         loader:  new  Tree.TreeLoader({   
  20.             dataUrl: 'http://localhost:8080/lab/menus.action'   
  21.         })   
  22.     });   
  23.   
  24.      // set the root node   
  25.      var  root =  new  Tree.AsyncTreeNode({   
  26.         text:  'Ext JS' ,   
  27.         draggable: false ,   
  28.         id: 'source'   
  29.     });   
  30.     tree.setRootNode(root);   
  31.   
  32.      // render the tree   
  33.     tree.render();   
  34.     root.expand();   
  35. });   

 

该篇是引用http://ajava.org/course/ajax/14590.html,这篇文章没有和数据库的交互,那么下一篇文章将会讲述和数据库交互的树的实例,下一个实例是我自己做的。

 

分享到:
评论

相关推荐

    Extjs Tree + JSON + Struts2 例子

    通过这种方式,我们解决了 Struts2 JSON 插件返回数据格式与 ExtJS Tree 期待格式不匹配的问题。现在,树形菜单应该能够正确地动态加载并显示从服务器获取的数据。这个例子展示了如何在实际开发中灵活应对数据格式...

    Extjs Tree + JSON + Struts2

    ExtJS Tree + JSON + Struts2 是一个常见的前端与后端交互技术组合,常用于构建动态的、数据驱动的树形结构界面。在这个项目中,`index.html` 是主页面,`tree.js` 包含了 ExtJS 的树组件相关的 JavaScript 代码,`...

    Extjs Tree + JSON + Struts2 示例源代码

    在我的随笔Extjs Tree + JSON + Struts2中我介绍了如何异步加载一个Extjs的树,但是很多网友留言说不能成功操作。现在我自己做了一个所有源代码的包,供大家下载。 有几点事项请大家注意 1、blogjava的文件上载要求...

    extjs tree + json+struts2示例源代码

    ExtJS Tree + JSON + Struts2 示例源代码详解 在Web开发中,构建交互式的用户界面是关键。ExtJS是一个强大的JavaScript库,尤其擅长创建桌面级的Web应用。本示例将详细介绍如何结合ExtJS的Tree组件、JSON数据格式...

    ExtJS4+Accordion+SERVLET/STRUTS2+JSON+Ext.tree.Panel实例

    总结来说,这个实例展示了如何将前端的ExtJS4框架,特别是其Accordion布局和Ext.tree.Panel组件,与Servlet和Struts2后端框架集成,利用JSON进行数据交换,来创建一个动态的、交互性强的Web应用。用户可以通过折叠和...

    Extjs_Tree_JSON_ _Struts2_例子

    可以看出,该案例涉及到了前端框架Extjs的使用、后端框架Struts2的应用、ORM技术Hibernate以及JSON数据格式的处理等多个方面,这些技术共同作用于一个典型的Web应用程序中。希望这些知识点能够帮助你更好地理解整个...

    SSH+extjs+json动态树的构造(附详细步骤及源码)

    本教程将详细讲解如何在SSH(Spring、Struts2、Hibernate)框架下,结合ExtJS库和JSON数据格式来实现这一功能。 首先,SSH框架是一个流行的企业级Java Web开发框架,Spring负责管理对象,Struts2处理请求与响应,...

    ExtJS_Tree利用_JSON_在Struts_2实现Ajax动态加载树结点

    在本文中,我们将深入探讨如何使用ExtJS框架的Tree组件,结合JSON数据格式以及Struts 2框架,来实现Ajax动态加载树形结构的节点。这是一项常见的需求,特别是在构建可扩展、用户友好的Web应用时,动态加载的树结构...

    struts2与extjs tree的完美结合

    在这个“struts2与extjs tree的完美结合”的示例中,开发者利用了Struts2的Annotation特性来简化配置,以及Struts2JSON插件来处理JSON数据,从而实现在服务器端动态生成和返回Tree节点。Annotation使得开发者能够在...

    ext tree json 例子(不含EXT包)

    其次,`Extjs Tree + JSON + Struts2 - 云自无心水自闲 - BlogJava.mht`这个文件可能展示了EXT JS Tree与Struts2框架集成的例子。Struts2是Java Web开发中的一个MVC框架,它可以帮助我们在服务器端处理JSON数据并将...

    Hibernate+Spring+Struts2+ExtJS CRUD

    在IT行业中,构建高效、可维护的Web应用是至关重要的,而SSH(Spring、Struts2、Hibernate)和ExtJS的结合使用就是一种常见的解决方案。本文将深入探讨如何利用这些技术实现CRUD(创建、读取、更新和删除)功能,并...

    extjs tree struts

    总的来说,"extjs tree struts"是一个关于如何在基于Struts的Web应用中使用ExtJS的TreePanel展示后台数据的主题,涉及到前端与后端的交互、JSON数据的处理以及JavaScript和Java的混合编程。理解并掌握这些知识点对于...

    EXT组件初学者教程 grid+tree+window+描述文档

    2. **EXTJS Tree组件**: - Tree是EXTJS中用于展现层级关系数据的组件,常用于目录结构或组织架构的显示。 - Tree支持动态加载,即根据需要加载子节点,这有助于提高页面性能。 - Tree具有勾选功能,可以通过设置...

    ExtJs在struts2.0.x下实现动态树的解决方案

    确保struts2-core、struts2-json-plugin或struts2-extjs-plugin已添加到类路径中。 2. **创建Struts2 Action** 创建一个Action类,该类将处理树的加载请求。这个Action需要返回树节点的数据,可以是JSON格式,这样...

    extjs动态树struts请求数据

    总结以上,ExtJS动态树与Struts的结合使用,需要熟练掌握ExtJS TreePanel的配置,JSON数据的构造和解析,以及Struts2的Action和Result机制。通过Ajax请求,前端可以动态获取和更新树形数据,实现交互式用户界面。

    整合--Struts2为extjs提供server数据

    1. **定义Struts2 Action**:在Struts2中创建一个Action类,该类负责处理前端发送的请求,并返回所需的数据。Action通常会调用业务层的服务方法,处理数据,然后将结果封装成JSON格式。 2. **配置Struts2 Action**...

    EXT树简介.doc

    在尝试使用EXTJS Tree时,作者遇到了一个问题:EXTJS Tree要求JSON数据以数组形式返回,而Struts2的json-plugin默认生成的是一个JSON对象。例如: ```json // json-plugin生成的数据 { "cls": "folder", "id": 10...

    实例:ExtjsTest+struts传输json格式的list对象

    本实例将探讨如何在ExtJS和Struts框架下,实现JSON格式的list对象的传输,从而提高数据交互的效率和灵活性。 首先,ExtJS是一个强大的JavaScript库,主要用于构建桌面级的Web应用。它提供了丰富的组件和数据管理...

    Java的Struts2框架配合Ext JS处理JSON数据的使用示例

    Java的Struts2框架配合Ext JS处理JSON数据是Web开发中常见的技术组合。Struts2是一个基于MVC模式的Web应用框架,而Ext JS是一个主要用于构建富客户端网页应用的JavaScript框架。JSON(JavaScript Object Notation)...

Global site tag (gtag.js) - Google Analytics