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:'正在加载...' }); 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); }); }
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 = "'正在建设中。。。'";
} else {
str = "''";
}
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);},多个事件之间用逗号隔开';