前段时间为一个朋友做了一个面板之间的交互的功能,我查看了一些技术资料,用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部分都讲完了,下面开始结合代码讲解jsp和extjs的使用。
在系统中extjs文件的位置,详见002.jpg
我把jsp和js都放在WebRoot/pages/panel,详见右上图的tmenu01.jsp和tmenu01.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);
//调用了MainPanel的loadClass的方法(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
分享到:
相关推荐
在EXTJS这个强大的JavaScript框架中,实现导出Excel功能是一项常见的需求。EXTJS提供了一种高效的方法来将数据导出到Excel格式,使得用户能够方便地处理和分析数据。在这个场景下,我们可以从以下几个关键知识点入手...
本文主要探讨Ext JS与后台服务器之间的交互操作,包括如何生成用户界面、实现与用户的交互以及如何通过与后端服务的通信来支持业务逻辑。 #### 二、生成用户界面 在Ext JS中,生成用户界面是一个基础但又非常关键...
2. **论坛功能实现**: - **版主管理**:可能包括版主的权限设置、帖子审核、用户管理等功能,这些通常涉及到ExtJS的树形组件、表格组件和表单组件。 - **发帖与回帖**:发帖和回帖功能涉及文本输入、按钮点击事件...
总结来说,EXT2.0.2的表格间数据拖拽涉及到EXT Grid、DataStore、DragDrop和DropTarget的使用,通过这些组件和接口的组合,开发者可以创建出高度交互、功能丰富的Web应用。实现这一功能需要对EXT的API有深入的理解,...
`upload_Ext` 指的是使用 ExtJS 框架实现的文件上传功能。ExtJS 是一款强大的 JavaScript UI 库,用于构建富客户端应用。它提供了丰富的组件和布局管理,使得开发者能够创建出美观且功能强大的用户界面。 在...
在“Ext3.0实现多文件上传.rar”这个压缩包中,我们聚焦于一个特定的功能:使用Ext3.0来实现实时的多文件上传功能。这个功能通常在网页应用中用于让用户能够一次性上传多个文件,如图片、文档等,极大地提高了用户...
3. 结合 EXT:将 SVG 代码嵌入到 EXT 组件中,利用 EXT 的事件处理和布局机制,确保图形的拖动和交互功能仍然可用。 4. 兼容性处理:添加必要的 JavaScript 检测和 polyfill,以确保在不支持 SVG 的旧版 IE 浏览器中...
在生成的代码中,你会看到Ajax请求的实现,例如使用Ext.Ajax或者Ext.data.Store进行数据的加载和交互。 此外,该生成器还可能包含了一些模板和示例代码,帮助开发者更快地上手。例如,它可能会提供一些常见的UI设计...
在本文中,我们将深入探讨基于ExtJS库的前端开发中的一些关键功能,特别是与表格相关的操作,以及对话框、弹出窗口和可伸缩面板的使用。ExtJS是一款强大的JavaScript框架,它为创建复杂的Web应用程序提供了丰富的...
通过上述步骤,我们可以使用ExtJS轻松地实现一个功能齐全的动态树形结构。这种结构不仅美观大方,而且能够高效地处理大量分层数据,非常适合于文件管理系统等场景。希望本教程能帮助您更好地理解和掌握ExtJS中的树形...
"ext多选下拉列表的全选功能实现"这个主题聚焦于一个特定的UI组件——ExtJS库中的MultiComboBox,这是一种允许用户多选的下拉列表控件。在实际应用中,全选功能常常被用来快速选择所有选项,极大地提高了用户的操作...
"ext-all.js"是EXT库的主要JavaScript文件,包含了EXT的所有功能,适合在生产环境中使用。这个文件通常在网页中通过`<script>`标签引入,以启用EXT的功能。 资源文件夹"resources"是EXT库的样式和图像资源所在之处...
这篇教程旨在帮助新手快速掌握EXT的使用,从而在Web开发中实现更加交互性强、功能完善的页面。 EXT2.0是一个重要的里程碑,它引入了许多新特性,例如改进了布局系统,使得组件的排列和自适应更加灵活。同时,EXT2.0...
实现这个功能的关键在于使用`Ext.grid.header.Container`类和`Ext.grid.ColumnLayout`布局。`header.Container`负责管理所有列头,而`ColumnLayout`布局则处理列的布局和拖放行为。在配置Grid时,我们需要启用`...
1. **EXT组件的使用**:WebQQ应用可能大量使用EXT提供的组件,例如对话框(Dialog)、面板(Panel)、表格(Grid)等,这些组件使得开发者可以快速搭建功能丰富的界面。 2. **数据绑定**:EXT支持双向数据绑定,这...
而YUI-EXT则是对YUI功能的补充,它主要专注于用户界面组件的实现,提供了丰富的UI元素和工具,使得开发者可以快速构建出专业级别的Web应用界面。 在YUI-EXT中,有几个核心概念值得深入理解: 1. **组件...
3. **添加功能**:EXT提供丰富的组件库,可以将按钮、表格、表单等组件添加到窗口中,以实现更多功能。例如,为窗口添加一个关闭按钮,并绑定关闭事件。 4. **动态加载内容**:窗口可以动态加载远程数据,通过Ajax...
通过分析这个EXT 2.0项目源代码,开发者可以学习如何组织EXT应用程序的结构,如何利用EXT的API创建组件,如何处理数据交互,以及如何实现特定的功能。对于想要提升EXT编程技能或者希望理解EXT内部机制的人来说,这是...