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

Ext----动态创建TabPanel

 
阅读更多

 

Ext.onReady(function(){
	new Ext.Viewport({
	    renderTo:'content',
	    layout: 'border',
	    items: [
	        {
	        	xtype:'panel',
	        	id:'fPanel',
	        	title:'功能面板',
	            width: 300,
	            layout: 'border',
	            collapsible: true,
	            region: 'west',
	        	items:createTabPanel('menuTab')
	        }
	    ]
	});
	getSubPanel(0,Ext.getCmp('menuTab'));
}

function createTabPanel(pid){
	var tPanel = new Ext.TabPanel({
        id:pid,
        activeTab: 0,
        region: 'center',
        enableTabScroll: true,
        border:false,
        html:'<img src="images/blue-loading.gif"/>正在加载...'
	});
	return tPanel;
}

function getSubPanel(sumID,panel){
	// 通过DWR代理获取数据
	dwrProxy.initTabPanel(function(data){
		panel.body.dom.innerHTML = '';
		items = eval(data);// 将json字符串转换成js对象
		for(i = 0; i < items.length; i++){
			panel.add(items[i]);
		}
		panel.setActiveTab(0);
		panel.setHeight(document.body.clientHeight);
	});
}

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://getahead.org/dwr/dwr20.dtd">

<dwr>
	<allow>
		<create creator="new" javascript="dwrProxy">
			<param name="class" value="com.linkage.app.web.TabPanelAction" />
		</create>
	</allow>
</dwr>
 

 

 

package com.linkage.app.web;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import com.linkage.app.util.StringUtil;
import com.linkage.cop.dao.DBConnection;

public class TabPanelAction {
	
	public String initTabPanel(){
		StringBuffer jsonArray = new StringBuffer();
		Connection conn = null;
		try {
			conn = DBConnection.getDBConnection();
			
			String json = getGridTabPanel(conn, "0");
			System.out.println(json);
			jsonArray.append(json);
		} catch (SQLException e) {
			e.printStackTrace();
		} finally{
			if (conn != null) {
				try {
					conn.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
		}
		return jsonArray.toString();
	}
	
	/*
	* 创建TabPanel
	*/
	private String createTabPanel(ResultSet rs, String id) throws SQLException{
		StringBuffer tabPanel = new StringBuffer();
		boolean flag = true;
		tabPanel.append("{");
		String[] names = {"xtype","id","enableTabScroll","border","activeTab","region","items","listeners"};
		String[] values = {
			"'tabpanel'",
			getResultVal(id, flag),
			"true",
			"false",
			"0",
			"'center'",
			"{items}",
			"{"+getResultVal(rs, "listeners", !flag)+"}"
		};
		tabPanel.append(getJsonProperty(names, values));
		tabPanel.append("}");
		return tabPanel.toString();
	}

	/*
	* 创建Panel,作为父TablePanel的成员,用于存放子TabPanel
	*/
	private String createPanel(ResultSet rs, String sumID) throws SQLException{
		int i = 1;
		boolean flag = true;
		StringBuffer jsonObj = new StringBuffer();
		jsonObj.append("{");
		String[] names = {"xtype","id","title","items","layout"};
		String[] values = {
			"'panel'",
			getResultVal(rs, i++, flag),
			getResultVal(rs, i++, flag),
			createTabPanel(rs, sumID),
			"'border'"
		};
		jsonObj.append(getJsonProperty(names, values));
		jsonObj.append("},");
		return jsonObj.toString();
	}

	/*
	* 创建Panel,作为TablePanel的成员,用于显示页面
	*/
	private String createPanel(ResultSet rs) throws SQLException{
		int i = 1;
		boolean flag = true;
		StringBuffer jsonObj = new StringBuffer();
		jsonObj.append("{");
		String[] names = {"xtype","layout","id","title","html","listeners"};
		String[] values = {
			"'panel'",
			"'fit'",
			getResultVal(rs, i++, flag),
			getResultVal(rs, i++, flag),
			createIframe(getResultVal(rs, "panel_id", !flag), getResultVal(rs, i++, !flag)),
			"{"+getResultVal(rs, i++, !flag)+"}"
		};
		jsonObj.append(getJsonProperty(names, values));
		jsonObj.append("},");
		return jsonObj.toString();
	}
	
	/*
	* 创建iframe,在panel的html属性中用到
	*/
	private String createIframe(String id, String src) {
		String str = "";
		if (StringUtil.isNull(src)) {
			str = "'<img src=\"images/blue-loading.gif\"/>正在建设中。。。'";
		} else {
			str = "'<iframe id=\"frame"+id+"\" scrolling=\"auto\" height=\"95%\" width=\"100%\" noresize src=\"'+ctx+'"+src+"\"></iframe>'";
		}
		return str;
	}

	/*
	* 从数据库获取TabPanel的配置信息,然后将数据转换成json字符串
	*/
	private String getGridTabPanel(Connection conn, String sumID) throws SQLException{
		StringBuffer jsonArray = new StringBuffer();
		String sql = "select panel_id,panel_name,action_url,LISTENERS,(select decode(count(*), 0, 0, 1) from gis_panel_conf b where a.panel_id = b.sum_panel_id) isFolder from GIS_PANEL_CONF a where sum_panel_id = "+sumID+" and state='A' order by order_id";
		PreparedStatement stmt = conn.prepareStatement(sql);
		ResultSet rs = stmt.executeQuery();
		
		jsonArray.append("[");
		while (rs.next()) {
			StringBuffer jsonObj = new StringBuffer();
			boolean isFolder = rs.getBoolean("isFolder");
			if (isFolder) {
				String panel = createPanel(rs, rs.getString("panel_id")+sumID);
				String items = getGridTabPanel(conn, rs.getString("panel_id"));
				panel = panel.replace("{items}", items);
				jsonObj.append(panel);
			} else {
				jsonObj.append(createPanel(rs));
			}
			jsonArray.append(jsonObj);
		}
		if (jsonArray.length() > 1) {
			jsonArray.deleteCharAt(jsonArray.length()-1);
		}
		jsonArray.append("]");
		
		stmt.close();
		rs.close();
		return jsonArray.toString();
	}
	
	private String getResultVal(ResultSet rs, int columnIndex, boolean isChar) throws SQLException{
		String val = rs.getString(columnIndex);
		val = getResultVal(val, isChar);
		return val;
	}
	
	private String getResultVal(String val, boolean isChar) throws SQLException{
		if (StringUtil.isNull(val)) {
			val = "";
		} else {
			if (isChar) {
				val = "'"+val+"'";
			}
		}
		return val;
	}

	private String getResultVal(ResultSet rs, String columnName, boolean isChar) throws SQLException{
		String val = rs.getString(columnName);
		val = getResultVal(val, isChar);
		return val;
	}

	private String getJsonProperty(String[] names, String[] vals){
		StringBuffer prop = new StringBuffer();
		for (int i = 0; i < names.length; i++) {
			if (!StringUtil.isNull(vals[i])) {
				prop.append(names[i] + ":" + vals[i]);
				prop.append(",");
			}
		}
		String val = prop.toString();
		if (val.endsWith(",")) {
			val = val.substring(0, val.length() - 1);
		}
		return val;
	}
}

 

CREATE TABLE "GIS_PANEL_CONF" 
   (	"PANEL_ID" NUMBER(12,0) NOT NULL ENABLE, 
	"PANEL_NAME" VARCHAR2(50), 
	"SUM_PANEL_ID" NUMBER(12,0), 
	"ACTION_URL" VARCHAR2(100), 
	"STATE" VARCHAR2(100), 
	"COMMENTS" VARCHAR2(100), 
	"ORDER_ID" NUMBER(10,0), 
	"LISTENERS" VARCHAR2(200), 
	 CONSTRAINT "PK_PANEL_ID" PRIMARY KEY ("PANEL_ID")
 
   COMMENT ON COLUMN "GIS_PANEL_CONF"."PANEL_ID" IS '标签编码';
 
   COMMENT ON COLUMN "GIS_PANEL_CONF"."PANEL_NAME" IS '名称';
 
   COMMENT ON COLUMN "GIS_PANEL_CONF"."SUM_PANEL_ID" IS '上级标签编码';
 
   COMMENT ON COLUMN "GIS_PANEL_CONF"."ACTION_URL" IS '链接';
 
   COMMENT ON COLUMN "GIS_PANEL_CONF"."STATE" IS '状态(A:显示X:屏蔽)';
 
   COMMENT ON COLUMN "GIS_PANEL_CONF"."COMMENTS" IS '备注';
 
   COMMENT ON COLUMN "GIS_PANEL_CONF"."ORDER_ID" IS '排序用';
 
   COMMENT ON COLUMN "GIS_PANEL_CONF"."LISTENERS" IS '标签事件,如:deactivate:function(){alert(123);},多个事件之间用逗号隔开';
 

 

 

 

 

 

 

  • 描述: 表数据示例
  • 大小: 57.4 KB
  • 描述: 最后的效果
  • 大小: 13.9 KB
分享到:
评论

相关推荐

    可以拖拽的页签面板----Ext TabPanel

    在EXT JS这个强大的JavaScript框架中,`Ext.TabPanel` 是一个非常重要的组件,它用于创建具有可切换页签的用户界面。在这个特定的例子中,我们关注的是一个扩展版的`Ext.TabPanel`,它增加了拖放(DragDrop)功能,...

    Ext中TabPanel的动态页面加载

    在EXT JS这个强大的JavaScript库中,`...结合`ComponentLoader`或Ajax请求,可以灵活地加载HTML内容或动态创建EXT JS组件,实现丰富的交互功能。理解并熟练掌握这一特性,将有助于开发高效且响应迅速的Web应用。

    EXT-js-中文手册

    - **更多组件**:除了MessageBox和Grid外,EXT还提供了大量的其他组件,如Form、Tree、TabPanel等,满足不同场景的需求。 - **使用方法**:通过实例演示如何在项目中引入并使用这些组件,提高开发效率。 #### 8. ...

    ext-3.1.1源码

    这个库由Sencha公司开发,提供了丰富的组件、布局管理、数据绑定和强大的API,使得开发者可以创建交互性强、用户体验良好的网页应用。下面将详细讨论EXTJS 3.1.1中的关键知识点。 1. **组件系统**: EXTJS的核心是...

    ext-word文档

    除了以上提到的内容外,ExtJS还提供了许多其他特性和组件,如`TabPanel`、`XTemplate`、`DataView`等。深入了解这些特性和组件可以帮助开发者更全面地掌握ExtJS框架。 总结来说,ExtJS是一个功能强大且易用的...

    treepanel 和 tabpanel 完整

    在本文中,我们将深入探讨`TreePanel`和`TabPanel`这两个重要的Ext JS组件,并讨论如何将它们结合在一起,以创建功能丰富的用户界面。`TreePanel`用于展示层次结构的数据,而`TabPanel`则提供了多标签页的功能,两者...

    extjs动态添加tabpanel标签页支持pannel嵌入

    extjs动态添加tabpanel标签页支持pannel嵌入 逻辑代码在 MyWindow.js里面直接调用 方法 就可以

    ExtJS-3.4.0系列:Ext.TabPanel

    在本文中,我们将深入探讨ExtJS中的`Ext.TabPanel`组件,它是创建多标签界面的核心元素。`Ext.TabPanel`允许开发者在单个容器中组织多个面板或视图,每个面板都有自己的标题,并且可以通过标签页进行切换。让我们...

    tapestry4.02中封装ext的TabPanel组件

    在 Tapestry 4.02 中封装 Ext 的 TabPanel,意味着开发者可以利用 Tapestry 的强类型、事件驱动和组件模型,结合 Ext TabPanel 的强大功能,以Java代码的方式创建和管理TabPanel。这使得在后端处理TabPanel的行为和...

    extjs4.2.1 tabPanel刷新及关闭标签

    如果标签页本身并没有定义`loader`对象,则可以通过动态创建的方式为其添加一个`TreeLoader`实例,以实现数据的加载和刷新。 #### 关闭当前标签页 关闭当前标签页是`TabPanel`常见的需求之一,可以通过如下方式...

    ext.net 动态创建gridpanel

    在这个场景中,我们将深入探讨如何使用Ext.NET代码动态创建GridPanel,并在各种窗口中灵活展示。 1. **动态创建GridPanel**: 在Ext.NET中,动态创建GridPanel意味着在运行时根据需要生成组件。这通常涉及到在...

    ext学习之路

    - **DataView**:数据展示组件,能动态渲染列表或网格中的数据。 - **DatePicker**:日期选择器,方便用户选择特定日期。 - **EditorGridPanel**:具备编辑功能的网格面板,适用于数据表格的编辑操作。 - **...

    Ext JS v3.1.1.zip

    例如,`ext-3.1.1`目录下可能包含了`GridPanel`、`FormPanel`、`TabPanel`等预定义的组件,它们分别对应表格视图、表单和选项卡布局。 其次,Ext JS提供了优雅的API,使得开发者能够方便地与用户进行交互。例如,...

    Extjs4.2 根据不同的数值设置tabpanel行的背景颜色

    // 创建TabPanel var tabPanel = Ext.create('Ext.tab.Panel', { width: 600, height: 300, items: [ { title: 'Value Table', layout: 'fit', items: Ext.create('MyApp.view.MyGrid') } ] }).render...

    ExtJs部署及使用方法

    在这个例子中,我们创建了一个名为`mainPanel`的TabPanel,其包含多个子面板,每个子面板都有自己的标题、布局和其他属性。通过`addTab`函数可以动态添加新的Tab,并且每个Tab都可以通过iframe加载不同的页面。 ...

    extjs4.x tabpanel 动态加载panel和html例子

    1. **创建tabpanel** 首先,我们需要创建一个tabpanel实例,并配置其属性,如`activeTab`(默认激活的标签页)和`layout`(布局方式,通常为`card`)。 ```javascript Ext.create('Ext.tab.Panel', { renderTo:...

    ExtJS tabPanel实例

    要创建一个 `tabPanel`,你需要先定义一个 `Ext.container.TabPanel` 实例。在JavaScript代码中,这通常会涉及创建一个新的对象,并配置相应的属性,如宽度、高度、边框等。 ```javascript var tabPanel = Ext....

    Ext开发总结

    创建TabPanel的示例: ```javascript var tabPanel = new Ext.TabPanel({ items: [{ title: 'Tab 1', content: '这是Tab 1的内容' }, { title: 'Tab 2', content: '这是Tab 2的内容' }] }); ``` 11. 表格...

    ExtJS TabPanel 标签操作

    ExtJS的TabPanel是其组件库中的一个核心组件,用于创建具有多个标签页的应用界面,每个标签页可以承载不同的内容。在本主题中,我们将深入探讨如何操作ExtJS的TabPanel,包括创建、添加、删除和切换标签页,以及...

    再探Ext中TreePanel控件和TabPanel控件搭配测试

    TabPanel是ExtJS提供的一种布局管理器,它允许在一个容器中创建多个面板(Panels),每个面板有自己的标签,用户可以通过点击标签在不同的面板间切换。TabPanel可以方便地管理和展示大量的内容,尤其适合于构建复杂...

Global site tag (gtag.js) - Google Analytics