- 浏览: 7936180 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (2425)
- 软件工程 (75)
- JAVA相关 (662)
- ajax/web相关 (351)
- 数据库相关/oracle (218)
- PHP (147)
- UNIX/LINUX/FREEBSD/solaris (118)
- 音乐探讨 (1)
- 闲话 (11)
- 网络安全等 (21)
- .NET (153)
- ROR和GOG (10)
- [网站分类]4.其他技术区 (181)
- 算法等 (7)
- [随笔分类]SOA (8)
- 收藏区 (71)
- 金融证券 (4)
- [网站分类]5.企业信息化 (3)
- c&c++学习 (1)
- 读书区 (11)
- 其它 (10)
- 收藏夹 (1)
- 设计模式 (1)
- FLEX (14)
- Android (98)
- 软件工程心理学系列 (4)
- HTML5 (6)
- C/C++ (0)
- 数据结构 (0)
- 书评 (3)
- python (17)
- NOSQL (10)
- MYSQL (85)
- java之各类测试 (18)
- nodejs (1)
- JAVA (1)
- neo4j (3)
- VUE (4)
- docker相关 (1)
最新评论
-
xiaobadi:
jacky~~~~~~~~~
推荐两个不错的mybatis GUI生成工具 -
masuweng:
(转)JAVA获得机器码的实现 -
albert0707:
有些扩展名为null
java 7中可以判断文件的contenttype了 -
albert0707:
非常感谢!!!!!!!!!
java 7中可以判断文件的contenttype了 -
zhangle:
https://zhuban.me竹板共享 - 高效便捷的文档 ...
一个不错的网络白板工具
一 GRID组件
1 普通的ext.grid.panel
Ext.onReady(function(){
//创建表格数据
var datas = [
[100,'张三',24],
[200,'李四',30],
[300,'王五',29]
];
//创建Grid表格组件
Ext.create('Ext.grid.Panel',{
title : '简单Grid表格示例',
renderTo: Ext.getBody(),
width:200,
height:130,
frame:true,
viewConfig: {
forceFit : true,
stripeRows: true//在表格中显示斑马线
},
store: {//配置数据源
fields: ['id','name','age'],//定义字段
proxy: {
type: 'memory',//Ext.data.proxy.Memory内存代理
data : datas,//读取内嵌数据
reader : 'array'//Ext.data.reader.Array解析器
},
autoLoad: true//自动加载
},
columns: [//配置表格列
{header: "id", width: 30, dataIndex: 'id', sortable: true},
{header: "姓名", width: 80, dataIndex: 'name', sortable: true},
{header: "年龄", width: 80, dataIndex: 'age', sortable: true}
]
});
});
2 分别有boolean,number,data,action等动作列
columns: [//配置表格列
{header: "姓名", width: 50, dataIndex: 'name'},
{header: "组长", width: 50, dataIndex: 'leader',
xtype: 'booleancolumn',//Ext.grid.column.Boolean布尔列
trueText: '是',
falseText: '否'
},
{header: "生日", width: 100, dataIndex: 'birthday',
xtype : 'datecolumn',//Ext.grid.column.Date日期列
format : 'Y年m月d日'//日期格式化字符串
},
{header: "薪资", width: 50, dataIndex: 'salary',
xtype: 'numbercolumn',//Ext.grid.column.Number数字列
format:'0,000'//数字格式化字符串
}
]
3 ACTION动作列,比如CRUD的按钮及相应的事件
{header: "操作", width: 70,
xtype: 'actioncolumn',//Ext.grid.column.Action动作列
items: [{
icon: 'images/edit.gif',//指定编辑图标资源的URL
handler: function(grid, rowIndex, colIndex) {
//获取被操作的数据记录
var rec = grid.getStore().getAt(rowIndex);
alert("编辑 " + rec.get('name'));
}
},{
icon: 'images/del.gif',//指定编辑图标资源的URL
handler: function(grid, rowIndex, colIndex) {
var rec = grid.getStore().getAt(rowIndex);
alert("删除 " + rec.get('name'));
}
},{
icon: 'images/save.gif',//指定编辑图标资源的URL
handler: function(grid, rowIndex, colIndex) {
var rec = grid.getStore().getAt(rowIndex);
alert("保存 " + rec.get('name'));
}
}]
}
4 自定义模版
header: "描述", width: 100,
xtype: 'templatecolumn',//Ext.grid.column.Template数字列
tpl : '{name}<tpl if="leader == false">不</tpl>是组长'
5 行号: Ext.create('Ext.grid.RowNumberer',{text : '行号', width : 35}),
6 表格渲染,自定义单元格中的值
columns: [//配置表格列
{header: "id", width: 30, dataIndex: 'id'},
{header: "姓名", width: 50, dataIndex: 'name'},
{header: "性别", width: 50, dataIndex: 'sex',renderer:formatSex},
{header: "生日", width: 100, dataIndex: 'birthday',
//格式化生日显示
renderer:Ext.util.Format.dateRenderer('Y年m月d日')
},
{header: "年龄", width: 50, dataIndex: 'age',renderer:formatAge}
]
});
//定义渲染函数,格式化性别显示
function formatSex(value){
return value=='man'?'男':'<font color=red>女</font>';
}
二 GRID组件的选择模式
1) ext.selection.cellmodel 选定其中一个单元格
//创建Grid表格组件
var grid = Ext.create('Ext.grid.Panel',{
title : '单元格选择模式示例',
renderTo: Ext.getBody(),
width:200,
height:170,
frame:true,
selType: 'cellmodel',//设置为单元格选择模式Ext.selection.CellModel
tbar : [{
text : '取得所选单元格',
handler : function(){
var cell = grid.getSelectionModel().getCurrentPosition();
alert(Ext.JSON.encode(cell));
}
}],
....................................
2 rowmodel
var grid = Ext.create('Ext.grid.Panel',{
title : '行选择模式示例',
renderTo: Ext.getBody(),
width:200,
height:170,
frame:true,
simpleSelect : true,//启用简单选择功能
multiSelect : true,//支持多选
selType: 'rowmodel',//设置为单元格选择模式Ext.selection.RowModel
tbar : [{
text : '取得所选行',
handler : function(){
var msg = '';
var rows = grid.getSelectionModel().getSelection();
for(var i = 0; i < rows.length; i++){
msg = msg + rows[i].get('name') + '\n';
}
alert(msg);
}
}],
3 复选框模式
Ext.ClassManager.setAlias('Ext.selection.CheckboxModel','selection.checkboxmodel'); (必须有这行)
//创建Grid表格组件
var grid = Ext.create('Ext.grid.Panel',{
title : '复选框选择模式示例',
renderTo: Ext.getBody(),
width:230,
height:170,
frame:true,
multiSelect : true,//支持多选
selModel: {
selType : 'checkboxmodel'//复选框选择模式Ext.selection.CheckboxModel
},
tbar : [{
text : '取得所选行',
handler : function(){
var msg = '';
var rows = grid.getSelectionModel().getSelection();
for(var i = 0; i < rows.length; i++){
msg = msg + rows[i].get('name') + '\n';
}
alert(msg);
}
}],
三 表格特性
1) ext.grid.feature.rowbody
跨越了表格的所有列。
Ext.onReady(function(){
//创建表格数据
var datas = [
['张三',2500,'张三的个人简历...'],
['李四',1500,'李四的个人简历...']
];
//创建Grid表格组件
Ext.create('Ext.grid.Panel',{
title : 'Ext.grid.feature.RowBody示例',
renderTo: Ext.getBody(),
width:300,
height:150,
frame:true,
store: {
fields: ['name','salary','introduce'],
proxy: {
type: 'memory',
data : datas,
reader : 'array'//Ext.data.reader.Array解析器
},
autoLoad: true
},
features: [Ext.create('Ext.grid.feature.RowBody',{
getAdditionalData: function(data, idx, record, orig) {
var headerCt = this.view.headerCt,
colspan = headerCt.getColumnCount();//获取表格的列数
return {
rowBody: record.get('introduce'),//指定行体内容
rowBodyCls: 'rowbodyColor',//指定行体样式
rowBodyColspan: colspan//指定行体跨列的列数
};
}
})],
columns: [//配置表格列
Ext.create('Ext.grid.RowNumberer',{text : '行号', width : 35}),
{header: "姓名", flex: 1, dataIndex: 'name'},
{header: "薪资", flex: 1, dataIndex: 'salary'}
]
});
});
2、汇总值
Ext.onReady(function(){
//创建表格数据
var datas = [
['张三',2500],
['李四',1500]
];
//创建Grid表格组件
Ext.create('Ext.grid.Panel',{
title : 'Ext.grid.feature.Summary示例',
renderTo: Ext.getBody(),
width:300,
height:150,
frame:true,
store: {
fields: ['name','salary','introduce'],
proxy: {
type: 'memory',
data : datas,
reader : 'array'//Ext.data.reader.Array解析器
},
autoLoad: true
},
features: [{
ftype: 'summary'//Ext.grid.feature.Summary表格汇总特性
}],
columns: [//配置表格列
{header: "姓名", flex: 1, dataIndex: 'name',
summaryType: 'count',//求数量
summaryRenderer: function(value){
return '员工总数:'+value
}
},
{header: "薪资", flex: 1, dataIndex: 'salary',
summaryType: 'average',//求平均值
summaryRenderer: function(value){
return '平均薪资:'+value
}
}
]
});
});
//其中可以有count,sum,min,max,average等方法,在summarytype中。
3 表格分组
Ext.onReady(function(){
//创建表格数据
var datas = [
['张三','男',29],['李四','女',30],
['王五','男',27],['赵六','女',31]
];
//创建Grid表格组件
Ext.create('Ext.grid.Panel',{
title : 'Ext.grid.feature.Grouping示例',
renderTo: Ext.getBody(),
width:300,
height:150,
frame:true,
store: {
fields: ['name','sex','age'],
groupField: 'sex',//设置分组字段
proxy: {
type: 'memory',
data : datas,
reader : 'array'//Ext.data.reader.Array解析器
},
autoLoad: true
},
features: [Ext.create('Ext.grid.feature.Grouping', {
groupByText : '用本字段分组',
showGroupsText : '显示分组',
groupHeaderTpl: '性别: {name} ({rows.length})', //分组标题模版
startCollapsed: true //设置初始分组是否收起
})],
columns: [//配置表格列
{header: "姓名", flex: 1, dataIndex: 'name'},
{header: "性别", flex: 1, dataIndex: 'sex'},
{header: "年龄", width: 110, dataIndex: 'age',
summaryType: 'average',//求数量
summaryRenderer: function(value){
return '平均年龄:'+value
}
]
});
});
四 表格插件
1) 单元格编辑插件
plugins: [
Ext.create('Ext.grid.plugin.CellEditing', {
clicksToEdit: 1//设置鼠标单击1次进入编辑状态
})
],
2)行编辑模式
plugins: [
//行编辑模式
Ext.create('Ext.grid.plugin.RowEditing', {
clicksToEdit: 1
})
],
3) 表格分页
Ext.onReady(function(){
var itemsPerPage = 2;//指定分页大小
var store = Ext.create('Ext.data.Store', {
autoLoad: {start: 0, limit: itemsPerPage},
fields:['id', 'name', 'age'],
pageSize: itemsPerPage, //设置分页大小
proxy: {
type: 'ajax',
url: 'jsonServer.jsp', //请求的服务器地址
reader: {
type: 'json',
root: 'rows',
totalProperty: 'results'
}
}
});
//创建Grid表格组件
Ext.create('Ext.grid.Panel',{
title : 'Ext.toolbar.Paging示例',
renderTo: Ext.getBody(),
width:400,
height:150,
frame:true,
store: store,
columns: [//配置表格列
{header: "id", width: 30, dataIndex: 'id', sortable: true},
{header: "姓名", width: 80, dataIndex: 'name', sortable: true},
{header: "年龄", width: 80, dataIndex: 'age', sortable: true}
],
bbar: [{
xtype: 'pagingtoolbar',
store: store, //这里需要指定与表格相同的store
displayInfo: true
}]
});
});
五 TREE组件
1)ext.tree.panel
Ext.onReady(function(){
var tree = Ext.create('Ext.tree.Panel', {
title: '树面板简单示例',
width : 150,
height : 100,
renderTo: Ext.getBody(),
root: {
text: '树根',//节点名称
expanded: true,//默认展开根节点
children: [{
text: '节点一',//节点名称
leaf: true//true说明为叶子节点
}, {
text: '节点二',//节点名称
leaf: true//true说明为叶子节点
}]
}
});
});
2 EXT JS 4中的多列树
Ext.onReady(function(){
var tree = Ext.create('Ext.tree.Panel', {
title: 'TreeGrid(多列树示例)',
renderTo: Ext.getBody(),
width : 200,
height : 120,
fields: ['name', 'description'],
columns: [{
xtype: 'treecolumn',//树状表格列
text: '名称',
dataIndex: 'name',
width: 100,
sortable: true
}, {
text: '描述',
dataIndex: 'description',
flex: 1,
sortable: true
}],
root: {
name: '树根',
description: '树根的描述',
expanded: true,
children: [{
name: '节点一',
description: '节点一的描述',
leaf: true
}, {
name: '节点二',
description: '节点二的描述',
leaf: true
}]
}
});
});
3 带复选框的树
Ext.onReady(function(){
var tree = Ext.create('Ext.tree.Panel', {
title: '复选框示例',
width : 150,
height : 100,
renderTo: Ext.getBody(),
root: {
text: '树根',//节点名称
expanded: true,//默认展开根节点
children: [{
text: '节点一',//节点名称
checked : true,//默认选中
leaf: true//true说明为叶子节点
}, {
text: '节点二',//节点名称
checked : false,//默认不选中
leaf: true//true说明为叶子节点
}]
}
});
});
4 分级加载树,可以分级加载大量的数据
Ext.onReady(function(){
//定义用户User模型
Ext.regModel("OrgInfo", {
fields: ['orgId','name', 'count']
});
var myStore = new Ext.data.TreeStore({
model : 'OrgInfo',
nodeParam : 'orgId',//指定节点参数名
proxy: {
type: 'ajax',
url: 'treeServer.jsp',
reader: 'json'
},
autoLoad: true,
root: {
name: '根节点',
id: '-1'
}
});
Ext.create('Ext.tree.Panel', {
title: '分级异步加载树节点示例',
renderTo: Ext.getBody(),
width : 250,
height : 150,
columns: [{
xtype: 'treecolumn',//树状表格列
text: '公司名称',
dataIndex: 'name',
width: 150,
sortable: true
}, {
text: '员工人数',
dataIndex: 'count',
flex: 1,
sortable: true
}],
store : myStore,
rootVisible: false
});
});
服务端:
<%
String orgId = request.getParameter("orgId");
String result="";
if("-1".equals(orgId)){
result = "[{name:'总公司',count:100,id:100}]";
}else if("100".equals(orgId)){
result = "[{name:'分公司一',count:20,id:110,leaf:true},{name:'分公司二',count:80,id:120}]";
}else if("120".equals(orgId)){
result = "[{name:'部门一',count:30,id:121,leaf:true},{name:'部门二',count:50,id:122,leaf:true}]";
}
response.getWriter().write(result);
%>
六 EXT JS与服务端整合
1)XML与JSON的生成
A 使用XTREAM
先有POJO,比如Person类,phonenumber类
public class Person {
private String name;
private int age;
private PhoneNumber homePhone;
private PhoneNumber officePhone;
......
}
public class PhoneNumber {
private String type;
private String number;
............}
转换:
PhoneNumber homePhone = new PhoneNumber("宅电","123456");
PhoneNumber officePhone = new PhoneNumber("办公电话","654321");
Person person = new Person("tom",20,homePhone,officePhone);
XStream xStream = new XStream(new DomDriver());
xStream.alias("person",Person.class);
String xml = xStream.toXML(person);
System.out.println(xml);
2)EXT中定义工具类,将LIST转为XML的方法(包含JSON转换)
public class Total {
private long results;
public long getResults() {
return results;
}
public void setResults(long results) {
this.results = results;
}
}
//主要是因为EXT JS前端中要读出记录数
public class ExtHelper {
/**
* 通过List生成XML数据
* @param recordTotal 记录总数,不一定与beanList中的记录数相等
* @param beanList 包含bean对象的集合
* @return 生成的XML数据
*/
public static String getXmlFromList(long recordTotal , List beanList) {
Total total = new Total();
total.setResults(recordTotal);
List results = new ArrayList();
results.add(total);
results.addAll(beanList);
XStream sm = new XStream(new DomDriver());
for (int i = 0; i < results.size(); i++) {
Class c = results.get(i).getClass();
String b = c.getName();
String[] temp = b.split("\\.");
sm.alias(temp[temp.length - 1], c);
}
String xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" + sm.toXML(results);
return xml;
}
/**
* 通过List生成XML数据
* @param beanList 包含bean对象的集合
* @return 生成的XML数据
*/
public static String getXmlFromList(List beanList){
return getXmlFromList(beanList.size(),beanList);
}
/**
* 通过List生成JSON数据
* @param recordTotal 记录总数,不一定与beanList中的记录数相等
* @param beanList 包含bean对象的集合
* @return 生成的JSON数据
*/
public static String getJsonFromList(long recordTotal , List beanList){
TotalJson total = new TotalJson();
total.setResults(recordTotal);
total.setItems(beanList);
JSONObject JsonObject = JSONObject.fromObject(total);
return JsonObject.toString();
}
/**
* 通过List生成JSON数据
* @param beanList 包含bean对象的集合
* @return 生成的JSON数据
*/
public static String getJsonFromList(List beanList){
return getJsonFromList(beanList.size(),beanList);
}
/**
* 通过bean生成JSON数据
* @param bean bean对象
* @return 生成的JSON数据
*/
public static String getJsonFromBean(Object bean){
JSONObject JsonObject = JSONObject.fromObject(bean);
return JsonObject.toString();
}
}
调用方法: String xml = ExtHelper.getXmlFromList(phoneList.size(), phoneList);
3)JSONLIB和struts2的生成
简单例子:
PhoneNumber homePhone = new PhoneNumber("宅电","123456");
PhoneNumber officePhone = new PhoneNumber("办公电话","654321");
Person person = new Person("tom",20,homePhone,officePhone);
JSONObject json = JSONObject.fromObject(person);
String jsonStr = json.toString();
System.out.println(json);
public class TotalJson {
private long results;
private List items;
......
}
由于struts2直接支持JSON形式,后端直接LIST返回即可,所以前端:
store: {
fields: ['name','age','sex','birthday'],
proxy: {
type: 'ajax',
url : '/ExtJS4-Examples/extjs.action',
reader: {
type: 'json',//Ext.data.reader.Json解析器
root: 'items'
}
},
autoLoad: true
},
七 主题
EXT JS 4中采用了SAAS来支持CSS的生成,SAAS为CSS的扩展,可以在SAAS中定义变量,甚至运算;COMPASS是开源CSS框架
使用SAAS样式;compass=saas样式表+大量优秀的CSS模式
gem install compass后
在ext js 4中的resources目录中,包含三个目录 css:编译后的级联样式文件,SAAS用于存放主题定制的SAAS源文件
在saas目录中有config.rb文件,可以写一个SCSS
@import 'compass';
$base-color: #FF6666;
@import 'ext4/default/all';
....
编译
compass compile resources/my_sass //将SCSS文件放在my_sass下编译。
1 普通的ext.grid.panel
Ext.onReady(function(){
//创建表格数据
var datas = [
[100,'张三',24],
[200,'李四',30],
[300,'王五',29]
];
//创建Grid表格组件
Ext.create('Ext.grid.Panel',{
title : '简单Grid表格示例',
renderTo: Ext.getBody(),
width:200,
height:130,
frame:true,
viewConfig: {
forceFit : true,
stripeRows: true//在表格中显示斑马线
},
store: {//配置数据源
fields: ['id','name','age'],//定义字段
proxy: {
type: 'memory',//Ext.data.proxy.Memory内存代理
data : datas,//读取内嵌数据
reader : 'array'//Ext.data.reader.Array解析器
},
autoLoad: true//自动加载
},
columns: [//配置表格列
{header: "id", width: 30, dataIndex: 'id', sortable: true},
{header: "姓名", width: 80, dataIndex: 'name', sortable: true},
{header: "年龄", width: 80, dataIndex: 'age', sortable: true}
]
});
});
2 分别有boolean,number,data,action等动作列
columns: [//配置表格列
{header: "姓名", width: 50, dataIndex: 'name'},
{header: "组长", width: 50, dataIndex: 'leader',
xtype: 'booleancolumn',//Ext.grid.column.Boolean布尔列
trueText: '是',
falseText: '否'
},
{header: "生日", width: 100, dataIndex: 'birthday',
xtype : 'datecolumn',//Ext.grid.column.Date日期列
format : 'Y年m月d日'//日期格式化字符串
},
{header: "薪资", width: 50, dataIndex: 'salary',
xtype: 'numbercolumn',//Ext.grid.column.Number数字列
format:'0,000'//数字格式化字符串
}
]
3 ACTION动作列,比如CRUD的按钮及相应的事件
{header: "操作", width: 70,
xtype: 'actioncolumn',//Ext.grid.column.Action动作列
items: [{
icon: 'images/edit.gif',//指定编辑图标资源的URL
handler: function(grid, rowIndex, colIndex) {
//获取被操作的数据记录
var rec = grid.getStore().getAt(rowIndex);
alert("编辑 " + rec.get('name'));
}
},{
icon: 'images/del.gif',//指定编辑图标资源的URL
handler: function(grid, rowIndex, colIndex) {
var rec = grid.getStore().getAt(rowIndex);
alert("删除 " + rec.get('name'));
}
},{
icon: 'images/save.gif',//指定编辑图标资源的URL
handler: function(grid, rowIndex, colIndex) {
var rec = grid.getStore().getAt(rowIndex);
alert("保存 " + rec.get('name'));
}
}]
}
4 自定义模版
header: "描述", width: 100,
xtype: 'templatecolumn',//Ext.grid.column.Template数字列
tpl : '{name}<tpl if="leader == false">不</tpl>是组长'
5 行号: Ext.create('Ext.grid.RowNumberer',{text : '行号', width : 35}),
6 表格渲染,自定义单元格中的值
columns: [//配置表格列
{header: "id", width: 30, dataIndex: 'id'},
{header: "姓名", width: 50, dataIndex: 'name'},
{header: "性别", width: 50, dataIndex: 'sex',renderer:formatSex},
{header: "生日", width: 100, dataIndex: 'birthday',
//格式化生日显示
renderer:Ext.util.Format.dateRenderer('Y年m月d日')
},
{header: "年龄", width: 50, dataIndex: 'age',renderer:formatAge}
]
});
//定义渲染函数,格式化性别显示
function formatSex(value){
return value=='man'?'男':'<font color=red>女</font>';
}
二 GRID组件的选择模式
1) ext.selection.cellmodel 选定其中一个单元格
//创建Grid表格组件
var grid = Ext.create('Ext.grid.Panel',{
title : '单元格选择模式示例',
renderTo: Ext.getBody(),
width:200,
height:170,
frame:true,
selType: 'cellmodel',//设置为单元格选择模式Ext.selection.CellModel
tbar : [{
text : '取得所选单元格',
handler : function(){
var cell = grid.getSelectionModel().getCurrentPosition();
alert(Ext.JSON.encode(cell));
}
}],
....................................
2 rowmodel
var grid = Ext.create('Ext.grid.Panel',{
title : '行选择模式示例',
renderTo: Ext.getBody(),
width:200,
height:170,
frame:true,
simpleSelect : true,//启用简单选择功能
multiSelect : true,//支持多选
selType: 'rowmodel',//设置为单元格选择模式Ext.selection.RowModel
tbar : [{
text : '取得所选行',
handler : function(){
var msg = '';
var rows = grid.getSelectionModel().getSelection();
for(var i = 0; i < rows.length; i++){
msg = msg + rows[i].get('name') + '\n';
}
alert(msg);
}
}],
3 复选框模式
Ext.ClassManager.setAlias('Ext.selection.CheckboxModel','selection.checkboxmodel'); (必须有这行)
//创建Grid表格组件
var grid = Ext.create('Ext.grid.Panel',{
title : '复选框选择模式示例',
renderTo: Ext.getBody(),
width:230,
height:170,
frame:true,
multiSelect : true,//支持多选
selModel: {
selType : 'checkboxmodel'//复选框选择模式Ext.selection.CheckboxModel
},
tbar : [{
text : '取得所选行',
handler : function(){
var msg = '';
var rows = grid.getSelectionModel().getSelection();
for(var i = 0; i < rows.length; i++){
msg = msg + rows[i].get('name') + '\n';
}
alert(msg);
}
}],
三 表格特性
1) ext.grid.feature.rowbody
跨越了表格的所有列。
Ext.onReady(function(){
//创建表格数据
var datas = [
['张三',2500,'张三的个人简历...'],
['李四',1500,'李四的个人简历...']
];
//创建Grid表格组件
Ext.create('Ext.grid.Panel',{
title : 'Ext.grid.feature.RowBody示例',
renderTo: Ext.getBody(),
width:300,
height:150,
frame:true,
store: {
fields: ['name','salary','introduce'],
proxy: {
type: 'memory',
data : datas,
reader : 'array'//Ext.data.reader.Array解析器
},
autoLoad: true
},
features: [Ext.create('Ext.grid.feature.RowBody',{
getAdditionalData: function(data, idx, record, orig) {
var headerCt = this.view.headerCt,
colspan = headerCt.getColumnCount();//获取表格的列数
return {
rowBody: record.get('introduce'),//指定行体内容
rowBodyCls: 'rowbodyColor',//指定行体样式
rowBodyColspan: colspan//指定行体跨列的列数
};
}
})],
columns: [//配置表格列
Ext.create('Ext.grid.RowNumberer',{text : '行号', width : 35}),
{header: "姓名", flex: 1, dataIndex: 'name'},
{header: "薪资", flex: 1, dataIndex: 'salary'}
]
});
});
2、汇总值
Ext.onReady(function(){
//创建表格数据
var datas = [
['张三',2500],
['李四',1500]
];
//创建Grid表格组件
Ext.create('Ext.grid.Panel',{
title : 'Ext.grid.feature.Summary示例',
renderTo: Ext.getBody(),
width:300,
height:150,
frame:true,
store: {
fields: ['name','salary','introduce'],
proxy: {
type: 'memory',
data : datas,
reader : 'array'//Ext.data.reader.Array解析器
},
autoLoad: true
},
features: [{
ftype: 'summary'//Ext.grid.feature.Summary表格汇总特性
}],
columns: [//配置表格列
{header: "姓名", flex: 1, dataIndex: 'name',
summaryType: 'count',//求数量
summaryRenderer: function(value){
return '员工总数:'+value
}
},
{header: "薪资", flex: 1, dataIndex: 'salary',
summaryType: 'average',//求平均值
summaryRenderer: function(value){
return '平均薪资:'+value
}
}
]
});
});
//其中可以有count,sum,min,max,average等方法,在summarytype中。
3 表格分组
Ext.onReady(function(){
//创建表格数据
var datas = [
['张三','男',29],['李四','女',30],
['王五','男',27],['赵六','女',31]
];
//创建Grid表格组件
Ext.create('Ext.grid.Panel',{
title : 'Ext.grid.feature.Grouping示例',
renderTo: Ext.getBody(),
width:300,
height:150,
frame:true,
store: {
fields: ['name','sex','age'],
groupField: 'sex',//设置分组字段
proxy: {
type: 'memory',
data : datas,
reader : 'array'//Ext.data.reader.Array解析器
},
autoLoad: true
},
features: [Ext.create('Ext.grid.feature.Grouping', {
groupByText : '用本字段分组',
showGroupsText : '显示分组',
groupHeaderTpl: '性别: {name} ({rows.length})', //分组标题模版
startCollapsed: true //设置初始分组是否收起
})],
columns: [//配置表格列
{header: "姓名", flex: 1, dataIndex: 'name'},
{header: "性别", flex: 1, dataIndex: 'sex'},
{header: "年龄", width: 110, dataIndex: 'age',
summaryType: 'average',//求数量
summaryRenderer: function(value){
return '平均年龄:'+value
}
]
});
});
四 表格插件
1) 单元格编辑插件
plugins: [
Ext.create('Ext.grid.plugin.CellEditing', {
clicksToEdit: 1//设置鼠标单击1次进入编辑状态
})
],
2)行编辑模式
plugins: [
//行编辑模式
Ext.create('Ext.grid.plugin.RowEditing', {
clicksToEdit: 1
})
],
3) 表格分页
Ext.onReady(function(){
var itemsPerPage = 2;//指定分页大小
var store = Ext.create('Ext.data.Store', {
autoLoad: {start: 0, limit: itemsPerPage},
fields:['id', 'name', 'age'],
pageSize: itemsPerPage, //设置分页大小
proxy: {
type: 'ajax',
url: 'jsonServer.jsp', //请求的服务器地址
reader: {
type: 'json',
root: 'rows',
totalProperty: 'results'
}
}
});
//创建Grid表格组件
Ext.create('Ext.grid.Panel',{
title : 'Ext.toolbar.Paging示例',
renderTo: Ext.getBody(),
width:400,
height:150,
frame:true,
store: store,
columns: [//配置表格列
{header: "id", width: 30, dataIndex: 'id', sortable: true},
{header: "姓名", width: 80, dataIndex: 'name', sortable: true},
{header: "年龄", width: 80, dataIndex: 'age', sortable: true}
],
bbar: [{
xtype: 'pagingtoolbar',
store: store, //这里需要指定与表格相同的store
displayInfo: true
}]
});
});
五 TREE组件
1)ext.tree.panel
Ext.onReady(function(){
var tree = Ext.create('Ext.tree.Panel', {
title: '树面板简单示例',
width : 150,
height : 100,
renderTo: Ext.getBody(),
root: {
text: '树根',//节点名称
expanded: true,//默认展开根节点
children: [{
text: '节点一',//节点名称
leaf: true//true说明为叶子节点
}, {
text: '节点二',//节点名称
leaf: true//true说明为叶子节点
}]
}
});
});
2 EXT JS 4中的多列树
Ext.onReady(function(){
var tree = Ext.create('Ext.tree.Panel', {
title: 'TreeGrid(多列树示例)',
renderTo: Ext.getBody(),
width : 200,
height : 120,
fields: ['name', 'description'],
columns: [{
xtype: 'treecolumn',//树状表格列
text: '名称',
dataIndex: 'name',
width: 100,
sortable: true
}, {
text: '描述',
dataIndex: 'description',
flex: 1,
sortable: true
}],
root: {
name: '树根',
description: '树根的描述',
expanded: true,
children: [{
name: '节点一',
description: '节点一的描述',
leaf: true
}, {
name: '节点二',
description: '节点二的描述',
leaf: true
}]
}
});
});
3 带复选框的树
Ext.onReady(function(){
var tree = Ext.create('Ext.tree.Panel', {
title: '复选框示例',
width : 150,
height : 100,
renderTo: Ext.getBody(),
root: {
text: '树根',//节点名称
expanded: true,//默认展开根节点
children: [{
text: '节点一',//节点名称
checked : true,//默认选中
leaf: true//true说明为叶子节点
}, {
text: '节点二',//节点名称
checked : false,//默认不选中
leaf: true//true说明为叶子节点
}]
}
});
});
4 分级加载树,可以分级加载大量的数据
Ext.onReady(function(){
//定义用户User模型
Ext.regModel("OrgInfo", {
fields: ['orgId','name', 'count']
});
var myStore = new Ext.data.TreeStore({
model : 'OrgInfo',
nodeParam : 'orgId',//指定节点参数名
proxy: {
type: 'ajax',
url: 'treeServer.jsp',
reader: 'json'
},
autoLoad: true,
root: {
name: '根节点',
id: '-1'
}
});
Ext.create('Ext.tree.Panel', {
title: '分级异步加载树节点示例',
renderTo: Ext.getBody(),
width : 250,
height : 150,
columns: [{
xtype: 'treecolumn',//树状表格列
text: '公司名称',
dataIndex: 'name',
width: 150,
sortable: true
}, {
text: '员工人数',
dataIndex: 'count',
flex: 1,
sortable: true
}],
store : myStore,
rootVisible: false
});
});
服务端:
<%
String orgId = request.getParameter("orgId");
String result="";
if("-1".equals(orgId)){
result = "[{name:'总公司',count:100,id:100}]";
}else if("100".equals(orgId)){
result = "[{name:'分公司一',count:20,id:110,leaf:true},{name:'分公司二',count:80,id:120}]";
}else if("120".equals(orgId)){
result = "[{name:'部门一',count:30,id:121,leaf:true},{name:'部门二',count:50,id:122,leaf:true}]";
}
response.getWriter().write(result);
%>
六 EXT JS与服务端整合
1)XML与JSON的生成
A 使用XTREAM
先有POJO,比如Person类,phonenumber类
public class Person {
private String name;
private int age;
private PhoneNumber homePhone;
private PhoneNumber officePhone;
......
}
public class PhoneNumber {
private String type;
private String number;
............}
转换:
PhoneNumber homePhone = new PhoneNumber("宅电","123456");
PhoneNumber officePhone = new PhoneNumber("办公电话","654321");
Person person = new Person("tom",20,homePhone,officePhone);
XStream xStream = new XStream(new DomDriver());
xStream.alias("person",Person.class);
String xml = xStream.toXML(person);
System.out.println(xml);
2)EXT中定义工具类,将LIST转为XML的方法(包含JSON转换)
public class Total {
private long results;
public long getResults() {
return results;
}
public void setResults(long results) {
this.results = results;
}
}
//主要是因为EXT JS前端中要读出记录数
public class ExtHelper {
/**
* 通过List生成XML数据
* @param recordTotal 记录总数,不一定与beanList中的记录数相等
* @param beanList 包含bean对象的集合
* @return 生成的XML数据
*/
public static String getXmlFromList(long recordTotal , List beanList) {
Total total = new Total();
total.setResults(recordTotal);
List results = new ArrayList();
results.add(total);
results.addAll(beanList);
XStream sm = new XStream(new DomDriver());
for (int i = 0; i < results.size(); i++) {
Class c = results.get(i).getClass();
String b = c.getName();
String[] temp = b.split("\\.");
sm.alias(temp[temp.length - 1], c);
}
String xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" + sm.toXML(results);
return xml;
}
/**
* 通过List生成XML数据
* @param beanList 包含bean对象的集合
* @return 生成的XML数据
*/
public static String getXmlFromList(List beanList){
return getXmlFromList(beanList.size(),beanList);
}
/**
* 通过List生成JSON数据
* @param recordTotal 记录总数,不一定与beanList中的记录数相等
* @param beanList 包含bean对象的集合
* @return 生成的JSON数据
*/
public static String getJsonFromList(long recordTotal , List beanList){
TotalJson total = new TotalJson();
total.setResults(recordTotal);
total.setItems(beanList);
JSONObject JsonObject = JSONObject.fromObject(total);
return JsonObject.toString();
}
/**
* 通过List生成JSON数据
* @param beanList 包含bean对象的集合
* @return 生成的JSON数据
*/
public static String getJsonFromList(List beanList){
return getJsonFromList(beanList.size(),beanList);
}
/**
* 通过bean生成JSON数据
* @param bean bean对象
* @return 生成的JSON数据
*/
public static String getJsonFromBean(Object bean){
JSONObject JsonObject = JSONObject.fromObject(bean);
return JsonObject.toString();
}
}
调用方法: String xml = ExtHelper.getXmlFromList(phoneList.size(), phoneList);
3)JSONLIB和struts2的生成
简单例子:
PhoneNumber homePhone = new PhoneNumber("宅电","123456");
PhoneNumber officePhone = new PhoneNumber("办公电话","654321");
Person person = new Person("tom",20,homePhone,officePhone);
JSONObject json = JSONObject.fromObject(person);
String jsonStr = json.toString();
System.out.println(json);
public class TotalJson {
private long results;
private List items;
......
}
由于struts2直接支持JSON形式,后端直接LIST返回即可,所以前端:
store: {
fields: ['name','age','sex','birthday'],
proxy: {
type: 'ajax',
url : '/ExtJS4-Examples/extjs.action',
reader: {
type: 'json',//Ext.data.reader.Json解析器
root: 'items'
}
},
autoLoad: true
},
七 主题
EXT JS 4中采用了SAAS来支持CSS的生成,SAAS为CSS的扩展,可以在SAAS中定义变量,甚至运算;COMPASS是开源CSS框架
使用SAAS样式;compass=saas样式表+大量优秀的CSS模式
gem install compass后
在ext js 4中的resources目录中,包含三个目录 css:编译后的级联样式文件,SAAS用于存放主题定制的SAAS源文件
在saas目录中有config.rb文件,可以写一个SCSS
@import 'compass';
$base-color: #FF6666;
@import 'ext4/default/all';
....
编译
compass compile resources/my_sass //将SCSS文件放在my_sass下编译。
发表评论
-
微信开发工具中时间问题的小坑
2018-02-07 19:07 816刚开始用微信小程序开发工具,每次运行任何应用,都报这个错误: ... -
三篇不错的介绍CSS GRID的文章
2017-12-06 09:08 533三篇不错的介绍CSS GRID的文章: http://www. ... -
双因素认证(2FA)教程
2017-11-03 09:16 1570http://www.ruanyifeng.com/blog/ ... -
es6 中的export
2017-08-20 08:00 814https://juejin.im/post/5998625f ... -
markdown中的空格
2017-08-20 07:53 1694即使手动输入空格, 也是很不推荐的方法。我推荐全角空格,切换 ... -
(转)讲真,别再使用JWT了
2017-08-17 23:21 1007不错的好文: http://insights.thoughtw ... -
(转)手把手教你WebStorm+chrome实现时时调试刷新
2017-08-15 10:50 3019参考: http://jingyan.baidu.com/ar ... -
IntelliJ Idea 2017 免费激活方法
2017-08-15 09:38 93121. 到网站 http://idea.lanyus.com/ ... -
前端框架这么多,该何去何从?
2017-08-04 07:17 645http://insights.thoughtworkers. ... -
记录一个HTML 5画拓扑图的商业公司
2017-07-18 19:56 845http://qunee.com/ DEMO:http:// ... -
vue 2例子学习收集
2017-07-16 11:46 9981 vue2.0手撸闲鱼App https://githu ... -
(收藏)虚拟DOM内部是如何工作的
2017-07-13 22:08 588虚拟DOM内部是如何工作的 https://segmentfa ... -
最近看到的几篇精彩JAVASCRIPT博客文章推荐
2017-07-11 07:10 562【深度长文】JavaScript数组所有API全解密 http ... -
jsonp 跨域原理:深入浅出 jsonp
2017-07-10 19:55 1427https://lzw.me/a/jsonp.html jso ... -
(转)深度长文-JavaScript数组所有API全解密
2017-07-08 19:59 817深度长文-JavaScript数组所有API全解密 http: ... -
(收藏)网页导出PDF的方案
2017-07-06 07:13 960(收藏)网页导出PDF的方案 https://yiqiwuli ... -
Chromium 新的弹窗机制以及 HTML 的 <dialog> 元素
2017-06-28 12:37 1144https://juejin.im/post/59525195 ... -
国内一个不错的大屏UI设计厂家
2017-06-03 19:43 3156http://www.lanlanwork.com/dp.ph ... -
canvas仿芝麻信用分仪表盘
2017-05-28 20:21 1584canvas仿芝麻信用分仪表盘 https://segment ... -
(转)CSS 变量教程
2017-05-10 21:12 573http://www.ruanyifeng.com/blog/ ...
相关推荐
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。
中医诊所系统,WPF.zip
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。
全国各省、297个地级市公路里程面板数据1999-2021年涵盖了中国各地区公路建设的详细情况,是衡量地区基础设施水平的重要指标。这些数据不仅包括了全国31个省份的公路里程,还深入到了297个地级市的层面,提供了从1999年至2021年的连续年份数据。这些数据来源于各省统计年鉴、经济社会发展统计数据库、地级市统计年鉴以及地级市发展统计公报,确保了数据的准确性和权威性。通过这些数据,可以观察到中国公路交通建设的发展不平衡性,沿海地区和长江中下游地区公路交通密度较高,而西部地区相对较低。这些面板数据为研究中国城市化进程、区域经济发展以及交通基础设施建设提供了宝贵的信息资源。
技术处工作事项延期完成申请单.docx
本文为图书馆管理课程设计SQL Server功能规范说明书。本说明书将: 描述数据库设计的目的; 说明数据库设计中的主要组成部分; 说明数据库设计中各功能的实现。 本文档主要内容包括对数据库设计结构的总体描述,对数据库中各种对象的描述(包括对象的名称、对象的属性、对象和其他对象直接的关系);在数据库主要对象之外,本文还将描述数据库安全性设置、数据库属性设置和数据库备份策略,为数据库管理员维护数据库安全稳定地运行提供参考;有需要的朋友可以下载看看
项目中常见的问题,记录一下解决方案
octopart数据格式样例
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。
本文档主要讲述的是Oracle 11g RAC安装与配置for Linux;希望对大家的学习会有帮助 文档结构 第一部分:Oracle Grid Infrastructure安装 第二部分:Oracle Clusterware与Oracle Real Application Clusters安装前准备规程 第三部分:安装Oracle Clusterware与Oracle Real Application Clusters 第四部分:Oracle Real Application Clusters环境配置 第五部分:Oracle Clusterware与Oracle Real Application Clusters参考资料
python教程.txt
文件太大放服务器下请务必到资源详情查看后然后下载 样本图:blog.csdn.net/2403_88102872/article/details/143979016 重要说明:数据集为小目标检测,训练map精度偏低属于正常现象,只要能检测出来即可。如果map低于0.5请勿奇怪,因为小目标检测是业界公认难检测的研究方向之一。 数据集格式:Pascal VOC格式+YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):3763 标注数量(xml文件个数):3763 标注数量(txt文件个数):3763 标注类别数:7 标注类别名称:["blackheads","cyst","fore","nodule","papule","pustule","whiteheads"]
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。
全国各地级市固定资产投资统计数据集覆盖了1996至2020年的时间跨度,提供了详尽的年度固定资产投资金额,单位为百万人民币。这些数据不仅包括了地级市级别的投资情况,还涵盖了省、区县以及行业等多个维度,为研究区域经济增长、投资结构和发展趋势提供了宝贵的数据支持。固定资产投资作为衡量一个地区经济发展活力和潜力的重要指标,反映了社会固定资产在生产、投资额的规模和速度。通过这些数据,研究人员可以深入分析不同地区、不同行业的投资特点,以及随时间变化的趋势,进而为政策制定和经济预测提供科学依据。
training_plan_db.sql
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。
5
全国各省地区城乡收入差距、泰尔指数、城镇农村居民可支配收入统计数据集提供了1990至2021年间的详细数据,覆盖全国31个省份。该数据集不仅包括城镇居民和农村居民的人均可支配收入,还涵盖了乡村人口、全体居民人均可支配收入、城镇人口以及年末常住人口等关键指标。泰尔指数作为衡量收入不平等的重要工具,通过计算城镇收入与农村收入之比,为研究者提供了一个量化城乡收入差距的科学方法。这些数据不仅有助于分析中国城乡之间的经济差异,还能为政策制定者提供决策支持,以缩小城乡差距、促进区域均衡发展。数据集的丰富性使其成为社会科学领域研究城乡发展、收入分配不平等等问题的宝贵资源。
FileName.zip
java面向对象 - 类与对象java面向对象 - 类与对象代码.zip