- 浏览: 194126 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
zm8859001:
不错,我也遇到这样的问题了!autoLoad,加载后总是出现页 ...
ExtJS中新增tabpanel加载其它完整页面(viewport布局中) -
辉煌之至:
不会啊,求
ExtJS+S2SH:使用Grid加载后台数据并分页(推荐给新学的朋友) -
chenglnb:
还不错 要是能实现复选框的选定就好了
ExtJS+S2SH:使用Grid加载后台数据并分页(推荐给新学的朋友) -
keylab:
运行你这个例子,发现有 bug啊,不能还原等等的
ExtJS之图片浏览器(转载推荐) -
bcwt:
高手啊,正好遇到这个问题,谢谢!
Class org.apache.struts2.json.JSONWriter can not access a member of *
// 初始化数据 function initData() { if (!searchForm) { searchForm = new Ext.FormPanel({ collapsible : true, autoHeight : true, frame : true, width : 800, monitorValid : true,// 把有formBind:true的按钮和验证绑定 layout : "form", labelWidth : 55, title : "查询房屋信息", renderTo : Ext.getBody(), items : [{ xtype : "panel",// 默认就是它 layout : "column", fieldLabel : "标题", isFormField : true, items : [{ columnWidth : 0.17, xtype : "textfield", name : "title", anchor : "100%" }, { columnWidth : 0.4, layout : "form", labelWidth : 60,// 注意,这个参数在这里可以调整简单fieldLabel的布局位置 items : [{ xtype : "datefield", fieldLabel : "发布日期", name : "booktime", anchor : "90%" }] }] }, { // 上面是第一行 xtype : "panel", layout : "column", fieldLabel : "几室", isFormField : true, items : [{ columnWidth : 0.15, xtype : "combo", name : "room", hiddenName : "room",// 大家要注意的是hiddenName和name属性,name只是下拉列表的名称,作用是可通过,而hiddenName才是提交到后台的input的name。如果没有设置hiddenName,在后台是接收不到真正的值的。 store : new Ext.data.SimpleStore({ fields : ['a', 'b'], data : [['1', '一'], ['2', '二'], ['3', '三']] }), valueField : 'a', displayField : 'b', mode : 'local', triggerAction : 'all', // forceSelection : true, // selectOnFocus : true, editable : false, emptyText : "无限制!", anchor : "80%" }, { columnWidth : 0.2, layout : "form", labelWidth : 40,// 注意,这个参数在这里可以调整简单fieldLabel的布局位置 items : [{ xtype : "combo", name : "ting", hiddenName : "ting", fieldLabel : "几厅", store : new Ext.data.SimpleStore({ fields : ['a', 'b'], data : [['1', '一'], ['2', '二'], ['3', '三']] }), valueField : 'a', displayField : 'b', allowBlank : true, readOnly : true, mode : 'local', triggerAction : 'all', selectOnFocus : true, emptyText : "无限制!", anchor : "80%" }] }, { columnWidth : 0.15, layout : "form", labelWidth : 40,// 注意,这个参数在这里可以调整简单fieldLabel的布局位置 items : [{ fieldLabel : "租金", xtype : "textfield", vtype : "double",// 实数格式验证,自己扩展ExtJS name : "priceStart", anchor : "95%" }] }, { columnWidth : 0.15, layout : "form", labelWidth : 10,// 注意,这个参数在这里可以调整简单fieldLabel的布局位置 items : [{ fieldLabel : "至", labelSeparator : "", xtype : "textfield", vtype : "double",// 实数格式验证,自己扩展ExtJS name : "priceEnd", anchor : "80%" }] }, { columnWidth : 0.2, layout : "form", labelWidth : 40, items : [{ xtype : "radio", fieldLabel : "排序", boxLabel : "升序", name : "sortCond", checked : true, inputValue : "asc",// 这里如果用value,值是on,所以用inputValue(出现这种情况的是radio,checkbox) anchor : "80%" }] }, { columnWidth : 0.15, layout : "form", labelWidth : 1,// 让标签宽度为很小的值(奇怪的是为0时反而不行) items : [{ xtype : "radio", boxLabel : "降序", labelSeparator : "",// 去除分隔符“:” name : "sortCond", inputValue : "desc", anchor : "80%" }] } ] }, { xtype : "panel", layout : "column", fieldLabel : "区域", isFormField : true, items : [{ columnWidth : 0.3, xtype : 'combo', store : new Ext.data.SimpleStore({ fields : ['id', 'name'], data : Ext.grid.areaComboBoxItems }), valueField : "id", displayField : "name", mode : 'local', // anchor : "60%", forceSelection : true,// 必须选择一项 emptyText : '请选择区域...',// 默认值 name : "area", hiddenName : "area",// hiddenName才是提交到后台的input的name editable : false,// 不允许输入 triggerAction : 'all',// 因为这个下拉是只能选择的,所以一定要设置属性triggerAction为all,不然当你选择了某个选项后,你的下拉将只会出现匹配选项值文本的选择项,其它选择项是不会再显示了,这样你就不能更改其它选项了。 id : 'parent_id', name : 'parent', listeners : { select : function(combo, record, index) { houseService.getAllStreets(combo.value, function(data) { if (data != null) { var list2 = []; for (var i = 0; i < data.length; i++) { list2[i] = [ data[i].sid, data[i].sname]; } Ext.grid.streetComboBoxItems = list2; Ext.getCmp('child_id') .clearValue(); Ext.getCmp('child_id').store .loadData(list2); } }); } } }, { fieldLabel : '街道',// 默认值 columnWidth : 0.3, labelWidth : 40, xtype : 'combo', store : new Ext.data.SimpleStore({ fields : ['id', 'name'], data : [] }), valueField : "id", displayField : "name", // 数据是在本地 mode : 'local', forceSelection : true,// 必须选择一项 emptyText : '请选择街道...',// 默认值 editable : false,// 不允许输入 triggerAction : 'all',// 因为这个下拉是只能选择的,所以一定要设置属性triggerAction为all,不然当你选择了某个选项后,你的下拉将只会出现匹配选项值文本的选择项,其它选择项是不会再显示了,这样你就不能更改其它选项了。 // allowBlank:false,//该选项值不能为空 fieldLabel : '选择', id : 'child_id', name : "street", hiddenName : "street", anchor : "60%" } ] }], buttons : [{ text : "确定", handler : query, formBind : true }, { text : "取消", handler : reset }] }); } function query() { // alert(DWRUtil.getValue("sortCond")); // 这里是关键,重新载入数据源,并把搜索表单值提交 ds.load({ params : { start : 0, limit : ptb.getPageSize(), 'cond.title' : Ext.get('title').dom.value, 'cond.areaId' : Ext.get('area').dom.value, 'cond.streetId' : Ext.get('street').dom.value, 'cond.room' : Ext.get('room').dom.value, 'cond.ting' : Ext.get('ting').dom.value, 'cond.booktime' : Ext.get('booktime').dom.value, 'cond.priceStart' : Ext.get('priceStart').dom.value, 'cond.priceEnd' : Ext.get('priceEnd').dom.value, 'cond.sortCond' : DWRUtil.getValue("sortCond") // 换一种方式获取radio里的值 // 取得搜索表单文本域的值,发送到服务端 } }) } function reset() { searchForm.form.reset(); } ds = new Ext.data.Store({ // proxy: new Ext.data.MemoryProxy(jsondata), proxy : new Ext.data.HttpProxy({ url : '../house.do' }), reader : new Ext.data.JsonReader({ totalProperty : 'totalProperty', root : 'root' }, [{ name : 'hid' }, { name : 'title' }, { name : 'linkman' }, { name : 'linktel' }, { name : 'hireprice' }, { name : 'booktimeInfo' }, { name : 'roomTing' }, { name : 'areaStreet' }]) }); ds.load({ params : { start : 0, limit : limit } }); // 这里很关键,如果不加,翻页后搜索条件就变没了,这里的意思是每次数据载入前先把搜索表单值加上去, // 这样就做到了翻页保留搜索条件了.如果struts框架里的form放在session区域,就可以省略。 // ds.on('beforeload', function() { // Ext.apply(this.baseParams, { // 'cond.title' : Ext.get('title').dom.value, // 'cond.area' : Ext.get('area').dom.value, // 'cond.street' : Ext.get('street').dom.value, // 'cond.room' : Ext.get('room').dom.value, // 'cond.ting' : Ext.get('ting').dom.value, // 'cond.booktime' : Ext.get('booktime').dom.value, // 'cond.priceStart' : Ext.get('priceStart').dom.value, // 'cond.priceEnd' : Ext.get('priceEnd').dom.value, // // sortCond : Ext.get('sortCond').dom.value, // 'cond.sortCond' : DWRUtil.getValue("sortCond") // // 换一种方式获取radio里的值 // }); // }); initGrid(); } // 初始化显示表格 function initGrid() { Ext.QuickTips.init(); // ////////////////////////////////////////////////////////////////////////////////////// // win // ////////////////////////////////////////////////////////////////////////////////////// if (!win) { win = new Ext.Window({ el : 'add-window', layout : 'fit', // 布局方式fit,自适应布局 width : 350, height : 400, modal : true, plain : true, bodyStyle : 'padding:5px;', maximizable : false,// 禁止最大化 closable : true,// 禁止关闭 collapsible : true,// 可折叠 buttonAlign : 'center', closeAction : 'hide' }); } var sm = new Ext.grid.CheckboxSelectionModel(); var cm = new Ext.grid.ColumnModel([sm, { id : 'hid', header : "房屋号", width : 20, sortable : true, dataIndex : 'hid' }, { header : "房屋标题", width : 40, sortable : true, dataIndex : 'title' }, { header : "联系人", width : 20, sortable : true, dataIndex : 'linkman' }, { header : "联系电话", width : 30, sortable : true, dataIndex : 'linktel' }, { header : "月租金", width : 30, sortable : true, renderer : function(value) { // Ext.util.Format.usMoney if (value > 1000) { return "<span style='color:red;font-weight:bold;'>" + value + "</span>元"; } else { return "<span style='color:green;font-weight:bold;'>" + value + "</span>元"; } }, dataIndex : 'hireprice' }, { header : "发布日期", width : 30, sortable : true, // renderer: Ext.util.Format.dateRenderer('m/d/Y'), dataIndex : 'booktimeInfo' }, { header : "房屋格局", width : 40, sortable : true, dataIndex : 'roomTing' }, { header : "街道地址", width : 60, sortable : true, dataIndex : 'areaStreet' }]); //定义一个完整的记录对象 TopicRecord = Ext.data.Record.create([{ name : 'hid', mapping : 'house.hid' },{ name : 'title', mapping : 'house.title' }, { name : 'hireprice', mapping : 'house.hireprice' }, { name : 'linkman', mapping : 'house.linkman' }, { name : 'linktel', mapping : 'house.linktel' },{ name : 'room', mapping : 'house.room' },{ name : 'ting', mapping : 'house.ting' },{ name : 'areaId', mapping : 'house.areaId' },{ name : 'streetId', mapping : 'house.streetId' },{ name : 'housething', mapping : 'house.housething' }]); //工具栏对象 ptb = new Ext.PagingToolbar({ plugins : new Ext.ux.Andrie.pPageSize(), pageSize : limit, store : ds, displayInfo : true, displayMsg : '显示第 {0} 条到 {1} 条记录,一共 {2} 条', emptyMsg : "对不起,查询记录为空!" }); grid = new Ext.grid.GridPanel({ id : 'button-grid', border : false, buttonAlign : 'right', ds : ds, cm : cm, sm : sm, stripeRows : true, loadMask : true, viewConfig : { forceFit : true }, // inline toolbars tbar : [{ id : 'houseAddBtn', text : '发布', tooltip : '发布一条房屋信息', iconCls : 'add', onClick : function() { // update form to insert form win.title = '添加房屋信息'; form = getInsertForm(); var items = new Ext.util.MixedCollection(); items.add("form", form); win.items = items; win.show(); //form.getForm().reset(); } }, '-', { id : 'houseEditBtn', text : '编辑', tooltip : '修改一条房屋信息', iconCls : 'option', onClick : function() { if (sm.getCount() == 1) { // update form to edit form win.title = '编辑房屋信息'; form = getUpdateForm(); var items = new Ext.util.MixedCollection(); items.add("form", form); win.items = items; win.show(); form.getForm().reset(); var hid = sm.getSelected().data.hid; houseService.findById(hid, callback); function callback(data) { //列表影射,columnModelvar var myNewRecord = new TopicRecord({'house.hid':data.hid, 'house.title': data.title, 'house.hireprice':data.hireprice ,'house.linkman':data.linkman,'house.linktel':data.linktel,'house.room':data.room,'house.ting':data.ting,'house.areaId':data.areaId,'house.streetId':data.streetId,'house.housething':data.housething}); houseService.getAllStreets(data.areaId, function( data) { if (data != null) { var list2 = []; for (var i = 0; i < data.length; i++) { list2[i] = [data[i].sid, data[i].sname]; } Ext.getCmp('child_id2').clearValue(); Ext.getCmp('child_id2').store .loadData(list2); // 实际的一条记录 form.getForm().loadRecord(myNewRecord); } }); } } else { Ext.MessageBox.alert('提示', '请选择一条记录!'); } } }, '-', { id : 'houseDelBtn', text : '删除', tooltip : '删除选择的房屋信息', iconCls : 'remove', onClick : function() { if (sm.hasSelection()) { Ext.MessageBox.confirm('提示', '你确定要删除这些租房信息么?', function(button) { if (button == 'yes') { var list = sm.getSelections(); var rList = []; for (var i = 0; i < list.length; i++) { rList[i] = list[i].data["hid"]; } houseService.delHouse(rList, function(data) { if (data > 0) { Ext.MessageBox .alert( '提示', "删除" + data + '条数据成功!'); // 如果把当页数据删除完毕,则跳转到上一页! if (data == ptb.store .getTotalCount() - ptb.cursor) { ptb.cursor = ptb.cursor - ptb.pageSize; } ds.load({ params : { start : ptb.cursor, limit : ptb.pageSize } }); } else { Ext.MessageBox .alert( '提示', "删除数据失败!"); } }); } }); } else { Ext.MessageBox.alert('提示', "请至少选择一条记录!"); } } }, '-', { id : 'houseRefreshBtn', text : '刷新', tooltip : '刷新房屋信息', iconCls : 'refresh', onClick : function() { ds.load({ params : { start : ptb.cursor, limit : ptb.pageSize } }); } }, '-', { id : 'houseCopyBtn', text : '复制', tooltip : '复制添加选择的房屋信息', iconCls : 'copy', onClick : function() { if (sm.getCount() == 1) { // update form to edit form form = getInsertForm(); var items = new Ext.util.MixedCollection(); items.add("form", form); win.items = items; win.show(); var hid = sm.getSelected().data.hid; houseService.findById(hid, callback); function callback(data) { //列表影射,columnModelvar var myNewRecord = new TopicRecord({'house.hid':data.hid, 'house.title': data.title, 'house.hireprice':data.hireprice ,'house.linkman':data.linkman,'house.linktel':data.linktel,'house.room':data.room,'house.ting':data.ting,'house.areaId':data.areaId,'house.streetId':data.streetId,'house.housething':data.housething}); houseService.getAllStreets(data.areaId, function( data) { if (data != null) { var list2 = []; for (var i = 0; i < data.length; i++) { list2[i] = [data[i].sid, data[i].sname]; } Ext.getCmp('child_id1').clearValue(); Ext.getCmp('child_id1').store .loadData(list2); // 实际的一条记录 form.getForm().loadRecord(myNewRecord); } }); } } else { Ext.MessageBox.alert('提示', "请选择一条记录!"); } } }, '-', { id : 'houseImportBtn', text : '导入', tooltip : '批量导入房屋信息', iconCls : 'import', onClick : function() { } }, '-', { id : 'houseExportExcelBtn', text : '导出Excel', tooltip : '导出房屋信息', iconCls : 'export', onClick : function() { window.location = "../houseExport.do?type=excel&start=" + ptb.cursor + "&limit=" + ptb.pageSize; } }, '-', { id : 'houseExportPdfBtn', text : '导出Pdf', tooltip : '导出房屋信息', iconCls : 'export', onClick : function() { window.location = "../houseExport.do?type=pdf&start=" + ptb.cursor + "&limit=" + ptb.pageSize; } }, '-', { id : 'housePrintBtn', text : '打印', tooltip : '打印房屋信息', iconCls : 'print', onClick : function() { //利用IE的简单打印 self.print(); } }, '-', { id : 'houseDetailBtn', text : '详情', tooltip : '查看所选房屋信息详情', iconCls : 'details', onClick : function() { Ext.MessageBox.alert("详细",'舞动绚丽的ExtJS吧!'); Ext.alert(333); } }], bbar : ptb, width : 800, autoHeight : true, // height : 250, // frame : true, title : '房屋信息列表', iconCls : 'icon-grid', renderTo : document.body }); grid.on('rowcontextmenu', rightClickFn);// 右键菜单代码关键部分 var rightClick = new Ext.menu.Menu({ id : 'rightClickCont', items : [{ id : 'rMenu1', handler : Ext.getCmp('houseAddBtn').onClick,// 点击后触发的事件 text : '添加信息' }, { id : 'rMenu2', handler : Ext.getCmp('houseEditBtn').onClick, text : '编辑信息' }, { id : 'rMenu3', handler : Ext.getCmp('houseDelBtn').onClick,// 点击后触发的事件 text : '删除信息' }, { id : 'rMenu4', handler : Ext.getCmp('houseRefreshBtn').onClick, text : '刷新数据' }, { id : 'rMenu5', handler : Ext.getCmp('houseCopyBtn').onClick,// 点击后触发的事件 text : '复制数据' }, { id : 'rMenu6', handler : Ext.getCmp('houseImportBtn').onClick, text : '导入数据' }, { id : 'rMenu7', handler : Ext.getCmp('houseExportExcelBtn').onClick,// 点击后触发的事件 text : '导出EXCEL数据' }, { id : 'rMenu8', handler : Ext.getCmp('houseExportPdfBtn').onClick, text : '导出PDF数据' }, { id : 'rMenu9', handler : Ext.getCmp('housePrintBtn').onClick,// 点击后触发的事件 text : '打印数据' }, { id : 'rMenu10', handler : Ext.getCmp('houseDetailBtn').onClick, text : '查看详情' }] }); function rightClickFn(grid, rowindex, e) { e.preventDefault(); rightClick.showAt(e.getXY()); } // function rMenuFnAdd() { // Ext.getCmp('houseAddBtn').onClick; // } // function rMenuFnEdit() { // // } // function rMenuFnDel() { // // } // function rMenuFnRefresh() { // // } // function rMenuFnCopy() { // alert(Ext.getCmp('houseCopyBtn').onClick); // return Ext.getCmp('houseCopyBtn').onClick; // } // function rMenuFnImport() { // // } // function rMenuFnExportExcel() { // // } // function rMenuFnExcelPdf() { // // } // function rMenuFnPrint() { // // } // function rMenuFnDetail() { // return Ext.getCmp('houseDetailBtn').onClick; // } } // 扩展extjs的验证! Ext.apply(Ext.form.VTypes, { // 固定电话、传真 phone : function(v) { var r = /^((\(\d{2,3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$/; return r.test(v); }, // 移动电话 mobile : function(v) { var r = /^((\(\d{2,3}\))|(\d{3}\-))?13\d{9}$/; return r.test(v); }, // 邮政编码 zip : function(v) { var r = /^[1-9]\d{5}$/; return r.test(v); }, // 搜索关键字过滤 search : function(v) { var r = /^[^`~!@#$%^&*()+=|\\\][\]\{\}:;'\,.<>/?]*$/; return r.test(v); }, // 简体中文 chinese : function(v) { var r = /^[\u0391-\uFFE5]+$/; return r.test(v); }, // 非中文 noChinese : function(v) { var r = /^^[\u0391-\uFFE5]+$/; return r.test(v); }, // 货币 currency : function(v) { var r = /^\d+(\.\d+)?$/; return r.test(v); }, // QQ qq : function(v) { var r = /^[1-9]\d{4,8}$/; return r.test(v); }, // 实数 double : function(v) { var r = /^[-\+]?\d+(\.\d+)?$/; return r.test(v); }, // 安全密码 safe : function(v) { var r = /^(([A-Z]*|[a-z]*|\d*|[-_\~!@#\$%\^&\*\.\(\)\[\]\{\}<>\?\\\/\'\"]*)|.{0,5})$|\s/; return !r.test(v); }, phoneText : '请输入正确的电话或传真号码!<br />格式如:0000-XXXXXXXX', mobileText : '请输入正确的移动电话号码!<br />格式如:13XXXXXXXXX', zipText : '请输入正确的邮政编码!', searchText : '请不要输入非法的搜索字符!', chineseText : '您只能在这里输入中文字符!', noChineseText : '您不能在这里输入中文字符!', currencyText : '请输入货币值!<br />格式如:1.00', qqText : '请输入合法的QQ号码!', doubleText : '请输入实数值,可带+/-号!', safeText : '请输入足够安全的字符,包含英文和数字货其他字符!' });
发表评论
-
ExtJS之图片浏览器(转载推荐)
2011-03-31 07:32 71551、效果图 2、此实例是在 http://you ... -
java中怎样反向显示字符串(包含实际开发中的例子)(转载)
2011-03-31 07:27 1209法1.借助StringBuilderSt ... -
ExtJs之grid使用详解(觉得很全面,推荐)
2011-03-29 09:41 27244Ext2.0是一个javascript框架,它的Grid ... -
ExtJS+S2SH:使用Grid加载后台数据并分页(推荐给新学的朋友)
2011-03-26 16:36 3262今天琢磨了半天,终于把ExtJS+S2SH中使用grid加载后 ... -
ExtJs中一个完整GridPanel实例(转)
2011-03-25 15:07 10889博客地址http://blog.csdn.net/ws_hgo ... -
ExtJs之GridPanel、FormPanel实例推荐 (转)
2011-03-25 15:04 5599转自:http://blog.csdn.net/jianxin ... -
ExtJS使用css实现透明背景(IE支持)
2011-03-11 21:49 1147应用PNG图片的透明或 ... -
ExtJS中关于ComboBox加载后台数据
2011-03-06 20:39 5927今天忙了一天,终于解决了让我头疼的ComboBox加载后台数据 ... -
ExtJs的ComboBox级联实现(转)
2011-03-05 20:48 1365ExtJs的ComboBox级联实现 1、首先定义store ... -
ExtJS 给textfield赋值的方法总结
2011-03-02 19:54 1658var value="值"; (1) ... -
ExtJS中新增tabpanel加载其它完整页面(viewport布局中)
2011-03-01 20:40 4527这个问题困扰了我两天 ... -
ExtJS之toolbars(很漂亮的界面)
2010-12-04 15:37 2414/*! * Ext JS Library 3.3.0 ... -
ExtJs+Json实践例子(1)(因篇幅过长,例子分为两部分)(转)
2010-11-29 10:48 1793ExtJS本质上也是一个A ... -
ExtJs实践:支持返回Json格式的ComboBox(转)
2010-11-28 19:52 1394假如我们程序中有产品(Product)和产品分类(Cat ... -
Extjs整合struts2(1)
2010-11-16 09:51 1099步骤1、在项目中添加struts2的库。如下 步骤2、 ... -
Ext中的get、getDom、getCmp、getBody、getDoc的区别
2010-11-09 19:57 816Ext中的get、getDom、getCmp、getBod ... -
Ext JS 入门之panel,TabPanel的简单使用
2010-10-17 14:12 1226<!DOCTYPE html PUBLIC " ...
相关推荐
综上所述,`@@@extjs+struts2+json plugin的例子`是一个综合运用`ExtJS`前端框架、`Struts2`后端框架以及`JSON`数据交换格式的Web应用示例。这样的组合可以构建出高性能、用户体验良好的企业级应用,同时利用`Struts...
ExtJS 是一个强大的JavaScript前端框架,它...总结,"extjs+asp例子"是一个结合了强大前端框架和服务器端脚本环境的应用示例,通过学习和实践,开发者可以提升构建Web应用的能力,特别是在数据驱动和交互式界面方面。
2. **EXTJS表单封装类**:EXTJS提供了强大的表单处理能力,能够方便地创建、读取和提交表单数据。表单封装类可以帮助开发者简化代码,提高代码复用性,使得表单的创建和验证变得更加容易。 3. **JSON数据交互**:在...
标题中的"Extjs4.1 小例子"意味着这个压缩包包含了一些基础的示例代码,旨在帮助初学者快速入门。通过这些小例子,你可以了解如何使用ExtJS 4.1来创建用户界面,包括布局管理、组件系统、数据绑定、事件处理等核心...
### Struts2与ExtJS集成实现文件的上传、下载与删除功能详解 #### 一、项目背景与技术栈概述 本案例旨在通过Struts2框架与ExtJS前端库的结合来实现文件的批量上传、下载以及删除功能。适用于对Struts2与ExtJS有...
这个压缩包中的源代码实例涵盖了以上所有知识点,通过查看和学习这些示例,开发者可以深入理解ExtJs 3.1的功能,并快速上手实践。对于任何想要掌握ExtJs的人来说,这是一份不可多得的学习材料。
标题“Struts2与extjs整合例子”表明我们将探讨如何将这两个技术结合在一起,以实现后端与前端的高效协作。在实际项目中,这样的整合可以利用Struts2的强大处理能力和ExtJS的出色用户界面,创建出功能丰富且用户体验...
### ExtJS 实践大量实例讲解 #### 概述 ExtJS 是一款用于构建现代 Web 应用的强大框架,它提供了一系列丰富的 UI 组件、数据处理功能以及与后端交互的能力。本文将通过大量的实例来讲解如何使用 ExtJS 来开发高...
ExtJS 是一个强大的JavaScript 框架,专用于构建富客户端Web应用。Servlet,则是Java Web开发中的一个重要组件,主要...通过实践这个例子,开发者可以深入理解这两者如何协同工作,为构建更复杂的Web应用打下坚实基础。
2. **信息提示框组件**:EXTJS提供了一系列的信息提示组件,如`Ext.MessageBox`,它们不仅外观美观,而且功能强大,能够支持多种提示类型(如警告、确认、询问等)和自定义配置,大大增强了Web应用的交互性。...
在实践中,EXTJS 3.0的例子可能包括创建一个简单的窗口应用,展示如何使用GridPanel加载和显示数据,或者构建一个包含多种表单元素的交互式表单。通过这些例子,开发者可以快速掌握EXTJS的基本用法,并逐步提升到更...
ExtJS 2.0 是一个历史悠久的...通过研究和实践这些例子,你将能够熟练地运用ExtJS 2.0开发出功能丰富、用户友好的Web应用。虽然ExtJS已经发展到更高版本,但2.0版的基础知识对于理解后续版本仍然是至关重要的。
ExtJS Tree是Sencha公司开发的ExtJS框架中的一个组件,用于构建可交互的树形数据结构。在网页应用中,树形结构常用于展示层级关系的数据,如目录结构、组织架构或者数据库的表关系。ExtJS Tree组件提供了丰富的功能...
1. **Store**: 存储数据的模型,可以是本地JSON对象或远程服务器数据,通过Ajax请求获取。 2. **Model**: 定义数据字段和它们的数据类型。 3. **Columns**: 表示表格列的配置,定义每列的显示内容、宽度、排序等属性...
ExtJS是一个功能强大的JavaScript库,专门用于构建富客户端的Web应用程序。它提供了丰富的组件和UI元素,包括数据绑定、布局管理...通过学习和实践这个例子,开发者能够熟练掌握在Web应用中创建和管理树形结构的方法。
综上所述,这个压缩包"一些extjs的小例子(java)"提供了一个学习和实践ExtJS与Java集成的起点。通过研究这些示例,开发者可以更好地理解如何构建树形菜单和Grid,以及如何与后端Java服务进行交互。对于希望提升前端...
Store是ExtJS中存储数据的主要机制,它可以是数组、JSON对象或者远程服务器的数据。Store负责加载、更新和管理数据,与Grid、Tree等组件配合使用,提供数据绑定功能。 DataView是一种灵活的数据展示方式,它可以以...
ExtJS是一种基于JavaScript的开源富客户端框架,由Sencha公司开发,主要用于构建桌面Web应用程序。...通过深入学习和实践,开发者可以利用ExtJS的强大功能,创建出更多功能丰富的股票分析或者其他数据展示应用。
通过学习这个例子,你可以更好地理解如何在实际项目中运用ExtJS 4 MVC模式来构建高效、模块化的Web应用程序。 这个压缩包文件"Ext4Mvc"可能包含了源代码、示例应用程序、文档或教程,这些都是为了帮助开发者更好地...