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

使用EXT实现面板之间的交互功能

阅读更多

前段时间为一个朋友做了一个面板之间的交互的功能,我查看了一些技术资料,用Ext2.3实现的,此程序主要用于学习和交流之用,如果涉及到版权的问题,请及时联系我。

例子的功能:west部分展示的是功能模块树,根节点为功能模块 ,它的两个子节点:系统管理和统计报表 ,系统管理有三个子节点:模块管理、角色管理和工号管理。统计报表有2个子节点:员工年收入统计和地区销售额统计。点击功能模块、系统管理和统计报表均不为在center部分打开新的面板,只有点击模块管理、角色管理、工号管理、员工年收入统计和地区销售额统计才会在右边打开新的面板,并在打开新的面板中显示与链接相关的关键信息。

实现的效果图:001.jpg

所使用到的技术:struts2 + JSON + Ext(2.3.0),顺便使用到了Spring

部分代码的展示:

Strust2的配置文件的部分代码:

<package name="menu" namespace="/menu" extends="struts-default">

                   <action name="do_*" method="{1}" class="menuAction">

                   </action>

         </package>

MenuAction的代码:

package com.demo.menu.action;

 

import java.util.ArrayList;

import java.util.List;

 

import org.springframework.context.annotation.Scope;

import org.springframework.stereotype.Controller;

 

import com.demo.app.entity.Menu;

import com.demo.common.action.BaseAction;

 

@SuppressWarnings("serial")

@Scope("prototype")

@Controller("menuAction")

public class MenuAction extends BaseAction {

    private List<Menu> menus;

   

    public void getMenus() {   

        menus = new ArrayList<Menu>();

        Menu system = new Menu();   

        system.setText("系统管理");   

        system.setCls("folder");   

        system.setLeaf(false);   

        system.setId(10);      //这里没有设置系统管理的链接值哦!

        menus.add(system);   

           

        List<Menu> list = new ArrayList<Menu>();   

        system.setChildren(list);   

          

        Menu menu = new Menu();   

        menu.setText("模块管理");   

        menu.setCls("file");   

        menu.setLeaf(true);   

        menu.setId(11);   

        menu.setHref("module/do_getList.action");   

        list.add(menu);   

        menu = new Menu();   

        menu.setText("角色管理");   

        menu.setCls("file");   

        menu.setLeaf(true);   

        menu.setId(12);

        menu.setHref("role/do_getList.action");

        list.add(menu);

        menu = new Menu();   

        menu.setText("工号管理");   

        menu.setCls("file");   

        menu.setLeaf(true);   

        menu.setId(13);  

        menu.setHref("opertor/do_getList.action");

        list.add(menu);  

          

        Menu statis = new Menu();   

        statis.setText("统计报表");   

        statis.setCls("folder");   

        statis.setLeaf(false);   

        statis.setId(20);  //这里没有设置统计报表的链接值哦!

        menus.add(statis);   

          

        list = new ArrayList<Menu>();   

        statis.setChildren(list);   

          

        menu = new Menu();   

        menu.setText("员工年收入统计");   

        menu.setCls("file");   

        menu.setLeaf(true);   

        menu.setId(21);  

        menu.setHref("statis/do_statOne.action");

        list.add(menu);   

          

        menu = new Menu();   

        menu.setText("地区营业额统计");   

        menu.setCls("file");   

        menu.setLeaf(true);    

        menu.setId(22);  

        menu.setHref("statis/do_statTwo.action");

        list.add(menu);   

            

        outJsonArray(menus);

    }   

}

BaseAction的所用到的部分方法:

public void outJsonArray(Object array) {

           JSONArray jsonObject = JSONArray.fromObject(array);   

           String jsonStr = "";

        try {   

            jsonStr = jsonObject.toString();   

        } catch (Exception e) {   

            jsonStr = null;   

        }

        outJsonString(jsonStr);

}

public void outJsonString(String str) {

           getResponse().setContentType("text/javascript;charset=UTF-8");

           outString(str);

}

public void outString(String str) {

           try {

                    PrintWriter out = getResponse().getWriter();

                    out.write(str);

           } catch (IOException e) {

           }

}

以上的代码比较简单,结合例子的功能,看懂应该没有问题。我没有把数据库设计和实现部分的代码写出,也没有给出Menu代码(不过我相信有点基础的人都知道Menu就是一个简单的JavaBean),而是在action中直接生成所需要的数据,起到一个简单模拟的作用。如果觉得有问题,还是回家好好看看java的基础知识吧。

Java部分都讲完了,下面开始结合代码讲解jspextjs的使用。

在系统中extjs文件的位置,详见002.jpg

我把jspjs都放在WebRoot/pages/panel,详见右上图的tmenu01.jsptmenu01.js,详细代码如下:

tmenu01.JSP的部分代码:

<%@ page language="java" pageEncoding="utf-8"%>

<%

String path = request.getContextPath();

String basePath = request.getScheme() + "://" + request.getServerName() + ":"

         + request.getServerPort() + path + "/";

%>

<link rel="stylesheet" type="text/css" href="<%=basePath%>extjs/css/ext-all.css" />

<script type="text/javascript" src="<%=basePath%>extjs/js/ext-base.js"></script>

<script type="text/javascript" src="<%=basePath%>extjs/js/ext-all-debug.js"></script>

<script type="text/javascript">

Ext.BLANK_IMAGE_URL = '<%=basePath%>/extjs/images/default/s.gif';

//如果不设置的话,west的树形结构有图片找不到

</script>

<script type="text/javascript" src="<%=basePath%>pages/panel/tmenu01.js"></script>

tmenu01.js的全部代码:

var WebApp = {};  

WebApp.Desktop = function(){  

    WestMenu = new Ext.tree.TreePanel({   

        region : 'west',

        margins: '0 5 0 0',  

        width : 200,

        autoScroll:true,   

        animate:true,   

        enableDD:true,   

        containerScroll: true,   

        loader: new Ext.tree.TreeLoader({   

            dataUrl:'menu/do_getMenus.action'

        })   

    });

 

    var root = new Ext.tree.AsyncTreeNode({   

        text: '功能模块',   

        draggable:false,   

        id:'source'  

    });   

    WestMenu.setRootNode(root);     

    root.expand();     

    WestMenu.on('click', function(node, e){//设置API树节点的点击监听器 ,这是自己添加的功能

         alert("isLeaf="+node.isLeaf()+";text="+node.attributes.text+";node.id="+node.id);

     if(node.isLeaf()){//如果是子节点,则进行相应的处理

          e.stopEvent();

                    MainPanel.loadClass(node.attributes.href, node.id,node.attributes.text);

          //调用了MainPanelloadClass的方法(3个参数)

         }

    });

 

    MainPanel = new Ext.TabPanel({  

        region : 'center',  

        activeTab: 0,  

        items: [{  

            title : '信息区',  

            frame : true 

        }]  

    }); 

   

    MainPanel.loadClass = function(href, id, text){

// MainPanel添加loadClass的方法(3个参数) ,这是自己添加的功能

           var id = id;

        var tab = this.getComponent(id);

           //根据ID得到一个Component,如果没有对应的Component,

           //tab的值为undefined,说明是第一次被打开.

           if(tab){

            this.setActiveTab(tab);          

        }else{

                    var autoLoad = {url: href};

                    var p = this.add(new Ext.Panel({

                             closable: true,

                             autoScroll:true,

                id: id,//id: 'test_panel',//docs-String

                cclass : id,//String

                             title:text+"面板("+id+")",

                             html:'<h1>面板主区域</h1><br/>'+text+"URL"+href,             

                        tbar:[{text:'顶部工具栏topToolbar'}],              

                        bbar:[{text:'底部工具栏bottomToolbar'}],

                //autoLoad: autoLoad,//一个对象{url: href}

                iconCls: 'icon-cls'

            }));

                    this.setActiveTab(p);                      

        }

    };         

      

    WebApp.Desktop.superclass.constructor.call(this, {  

        layout : "border",  

        items : [ WestMenu, MainPanel]       

    });     

}  

Ext.extend(WebApp.Desktop, Ext.Viewport);

//这是EXTJS典型的继承方式,让WebApp.Desktop继承Ext.Viewport

 

 

  • 大小: 42 KB
  • 大小: 29.5 KB
0
2
分享到:
评论

相关推荐

    ext实现导出excel的功能。

    在EXTJS这个强大的JavaScript框架中,实现导出Excel功能是一项常见的需求。EXTJS提供了一种高效的方法来将数据导出到Excel格式,使得用户能够方便地处理和分析数据。在这个场景下,我们可以从以下几个关键知识点入手...

    Ext与后台服务器的交互操作

    本文主要探讨Ext JS与后台服务器之间的交互操作,包括如何生成用户界面、实现与用户的交互以及如何通过与后端服务的通信来支持业务逻辑。 #### 二、生成用户界面 在Ext JS中,生成用户界面是一个基础但又非常关键...

    Ext实现的论坛前台代码

    2. **论坛功能实现**: - **版主管理**:可能包括版主的权限设置、帖子审核、用户管理等功能,这些通常涉及到ExtJS的树形组件、表格组件和表单组件。 - **发帖与回帖**:发帖和回帖功能涉及文本输入、按钮点击事件...

    基于EXT2.0.2表格间数据拖拽

    总结来说,EXT2.0.2的表格间数据拖拽涉及到EXT Grid、DataStore、DragDrop和DropTarget的使用,通过这些组件和接口的组合,开发者可以创建出高度交互、功能丰富的Web应用。实现这一功能需要对EXT的API有深入的理解,...

    upload_Ext实现上传功能

    `upload_Ext` 指的是使用 ExtJS 框架实现的文件上传功能。ExtJS 是一款强大的 JavaScript UI 库,用于构建富客户端应用。它提供了丰富的组件和布局管理,使得开发者能够创建出美观且功能强大的用户界面。 在...

    Ext3.0实现多文件上传.rar

    在“Ext3.0实现多文件上传.rar”这个压缩包中,我们聚焦于一个特定的功能:使用Ext3.0来实现实时的多文件上传功能。这个功能通常在网页应用中用于让用户能够一次性上传多个文件,如图片、文档等,极大地提高了用户...

    基于EXT | vml的流程图的实现

    3. 结合 EXT:将 SVG 代码嵌入到 EXT 组件中,利用 EXT 的事件处理和布局机制,确保图形的拖动和交互功能仍然可用。 4. 兼容性处理:添加必要的 JavaScript 检测和 polyfill,以确保在不支持 SVG 的旧版 IE 浏览器中...

    Ext界面生成器,功能强大

    在生成的代码中,你会看到Ajax请求的实现,例如使用Ext.Ajax或者Ext.data.Store进行数据的加载和交互。 此外,该生成器还可能包含了一些模板和示例代码,帮助开发者更快地上手。例如,它可能会提供一些常见的UI设计...

    Ext常用功能开发总结

    在本文中,我们将深入探讨基于ExtJS库的前端开发中的一些关键功能,特别是与表格相关的操作,以及对话框、弹出窗口和可伸缩面板的使用。ExtJS是一款强大的JavaScript框架,它为创建复杂的Web应用程序提供了丰富的...

    ext实现动态树

    通过上述步骤,我们可以使用ExtJS轻松地实现一个功能齐全的动态树形结构。这种结构不仅美观大方,而且能够高效地处理大量分层数据,非常适合于文件管理系统等场景。希望本教程能帮助您更好地理解和掌握ExtJS中的树形...

    ext多选下拉列表的全选功能实现

    "ext多选下拉列表的全选功能实现"这个主题聚焦于一个特定的UI组件——ExtJS库中的MultiComboBox,这是一种允许用户多选的下拉列表控件。在实际应用中,全选功能常常被用来快速选择所有选项,极大地提高了用户的操作...

    ext下载包,ext,ext包,ext下载

    "ext-all.js"是EXT库的主要JavaScript文件,包含了EXT的所有功能,适合在生产环境中使用。这个文件通常在网页中通过`&lt;script&gt;`标签引入,以启用EXT的功能。 资源文件夹"resources"是EXT库的样式和图像资源所在之处...

    EXT2.3+EXT2.0教程

    这篇教程旨在帮助新手快速掌握EXT的使用,从而在Web开发中实现更加交互性强、功能完善的页面。 EXT2.0是一个重要的里程碑,它引入了许多新特性,例如改进了布局系统,使得组件的排列和自适应更加灵活。同时,EXT2.0...

    ext三列拖动

    实现这个功能的关键在于使用`Ext.grid.header.Container`类和`Ext.grid.ColumnLayout`布局。`header.Container`负责管理所有列头,而`ColumnLayout`布局则处理列的布局和拖放行为。在配置Grid时,我们需要启用`...

    ext 实现的webQQ 源码、应用、含数据库

    1. **EXT组件的使用**:WebQQ应用可能大量使用EXT提供的组件,例如对话框(Dialog)、面板(Panel)、表格(Grid)等,这些组件使得开发者可以快速搭建功能丰富的界面。 2. **数据绑定**:EXT支持双向数据绑定,这...

    YUI-EXT使用详解

    而YUI-EXT则是对YUI功能的补充,它主要专注于用户界面组件的实现,提供了丰富的UI元素和工具,使得开发者可以快速构建出专业级别的Web应用界面。 在YUI-EXT中,有几个核心概念值得深入理解: 1. **组件...

    EXT弹出框改装实现

    3. **添加功能**:EXT提供丰富的组件库,可以将按钮、表格、表单等组件添加到窗口中,以实现更多功能。例如,为窗口添加一个关闭按钮,并绑定关闭事件。 4. **动态加载内容**:窗口可以动态加载远程数据,通过Ajax...

    ext2.0项目源代码供大家学习ext使用

    通过分析这个EXT 2.0项目源代码,开发者可以学习如何组织EXT应用程序的结构,如何利用EXT的API创建组件,如何处理数据交互,以及如何实现特定的功能。对于想要提升EXT编程技能或者希望理解EXT内部机制的人来说,这是...

Global site tag (gtag.js) - Google Analytics