`

我的ext范例

    博客分类:
  • ajax
阅读更多
本人学习ext已有一段时间,将我的学习项目贴出来供大家参考
主程序参考ext官方网站的ext的window范例
main.jsp
<%@ page contentType="text/html; charset=utf-8"%>
<%@ page import="org.acegisecurity.context.SecurityContext, org.acegisecurity.userdetails.UserDetails" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
	<title>House Charge Expenses System</title>
	<meta http-equiv="content-type" content="text/html; charset=utf-8" />
	<meta http-equiv="content-language" content="utf-8" />
	<meta content="all" name="robots" />
	<meta name="author" content="ark"/>
	<meta name="copyright" content="ark" />
	<meta name="description" content="just for testing" />
	<meta name="keywords" content="family,finance,study" />
	<link rel="stylesheet" type="text/css" href="<%=request.getContextPath() %>/ajaxlib/ext/resources/css/ext-all.css" />
	<link rel="stylesheet" type="text/css" href="<%=request.getContextPath() %>/ajaxlib/mylib/ext-patch.css" />
	<link rel="stylesheet" type="text/css" href="<%=request.getContextPath() %>/css/windows.css" />
	<script type="text/javascript" src="<%=request.getContextPath() %>/ajaxlib/ext/adapter/ext/ext-base.js"></script>
	<script type="text/javascript" src="<%=request.getContextPath() %>/ajaxlib/ext/ext-all-debug.js"></script>
	<script type="text/javascript" src="<%=request.getContextPath() %>/ajaxlib/ext/ext-lang-zh_CN.js"></script>
	<!--buffalo-->
	<script type="text/javascript" src="<%=request.getContextPath() %>/ajaxlib/buffalo/prototype.js"></script>
	<script type="text/javascript" src="<%=request.getContextPath() %>/ajaxlib/buffalo/buffalo.js"></script>
	<script type="text/javascript" src="<%=request.getContextPath() %>/ajaxlib/mylib/buffaloext.js"></script>
	<script type="text/javascript" src="<%=request.getContextPath() %>/ajaxlib/mylib/dwrproxy.js"></script>
	<script type="text/javascript" src="<%=request.getContextPath() %>/ajaxlib/mylib/ext-lang-zh.js"></script>
	<script type="text/javascript" src="<%=request.getContextPath() %>/dwr/interface/houseChargeService.js"></script>
	<script type="text/javascript" src="<%=request.getContextPath() %>/dwr/engine.js"></script>
	<script language="javascript">
		dwr.engine.setAsync(false);//同步
		var ContextPath="<%=request.getContextPath() %>"
		var END_POINT="<%=request.getContextPath() %>/bfapp";
		var buffalo = new Buffalo(END_POINT,false);
	</script>
	<script type="text/javascript" src="<%=request.getContextPath() %>/ajaxlib/mylib/buffaloext.js"></script>

    <script type="text/javascript" src="desktop.js"></script>
    <script type="text/javascript" src="windows.js"></script>
    <script type="text/javascript" src="<%=request.getContextPath() %>/steady/chargeItem.js"></script>
    <script type="text/javascript" src="<%=request.getContextPath() %>/steady/incomeItem.js"></script>
    <script type="text/javascript" src="<%=request.getContextPath() %>/steady/familyMember.js"></script>
    <script type="text/javascript" src="<%=request.getContextPath() %>/steady/bankAccount.js"></script>
    <script type="text/javascript" src="<%=request.getContextPath() %>/daily/incomeDaily.js"></script>
</head>
<body>
<div id="x-taskbar">
	<div id="title-bar">House Charge Expenses System</div>
	<div id="logname">用户名:<strong class="username">
	<%
		SecurityContext context=(SecurityContext)request.getSession().getAttribute("ACEGI_SECURITY_CONTEXT");
		UserDetails userDetails=(UserDetails)context.getAuthentication().getPrincipal();
		out.print(userDetails.getUsername());
	%>
	</strong> | <a href="<%=request.getContextPath() %>/logout.html">登出</a> 
	</div>    
    <div id="x-launcher-wrap"><div id="x-launcher-inner"><div id="x-launcher-left"><div id="x-launcher-right"><div id="x-launcher-center"><div id="x-launcher"></div><div id="x-info"><ext:user-name /></div></div></div></div></div></div>
</div>
<div id="x-desktop">    
</div>
<div id="x-windows">
    <div id="x-winlist"><div id="spacer"></div></div>
    <div class="x-clear"></div>
</div>
</body>
</html>

windows.js
Myapp = new Ext.app.App({
    init :function(){
        Ext.QuickTips.init();
    },

	getModules : function(){
		return [
			new chargeItemWindow(),
			new incomeItemWindow(),
			new familyMemberWindow(),
			new bankAccountWindow(),
			new incomeDailyWindow(),
		];
	}
});


familyMember.js
familyMemberWindow = Ext.extend(Ext.app.Module, {
	init : function(){
		this.launcher = {
			text: '家庭成员',
			iconCls:'icon-grid',
			handler : this.createWindow,
			scope: this
		}
	},
    
	createWindow : function(){
		var desktop = this.app.getDesktop();
		var cm = new Ext.grid.ColumnModel([{
			header: '姓名',
			dataIndex: 'name',
			width: 220,
			editor: new  Ext.grid.GridEditor(new Ext.form.TextField({allowBlank: false}))
		}]);

		// by default columns are sortable
		cm.defaultSortable = true;

		var FamilyMember = Ext.data.Record.create([
			{name:'id',type:'int',mapping:'id'},
			{name: 'name',type:'string',mapping: 'name'}
		]);

		var ds = new Ext.data.Store({
			proxy: new Buffalo.Ext.DataProxy(buffalo,"houseChargeService.getAllFamilyMember",[]),
			reader: new Ext.data.ArrayReader({id: 'id'}, FamilyMember),
			// turn off remote sorting
			remoteSort: false
		});

		var gridPanel = new Ext.grid.EditorGridPanel({
			store: ds,
			cm: cm,
			selModel: new Ext.grid.CellSelectionModel(),
			enableColLock:false,
			buttonAlign:'top',
			tbar:[{
					text: '新增',
					handler :doAdd
				},{
					text: '保存',
					handler : doSave
				},{
					text: '删除',
					handler : doDel
 				}]
		});

		var win = desktop.getWindow('familyMember-win');
		if(!win){
 			win = desktop.createWindow({
				id: 'familyMember-win',
				title:'家庭成员',
				width:740,
				height:460,
				x:10,
				y:10,
				iconCls: 'icon-grid',
				shim:false,
				animCollapse:false,
				constrainHeader:true,
				layout: 'fit',
				items: gridPanel 
			});
		}
        ds.load();
        win.show();
 
    	function doAdd() {
			var p = new FamilyMember({
				id:-1,
				name:''
 			});
			gridPanel.stopEditing();
			var yetCount=ds.getCount();
			ds.insert(yetCount, p);
			//标示cell已修改过
			ds.getAt(yetCount).set("name",'未命名');
			gridPanel.startEditing(yetCount, 0);
		}
	
		function doSave() {
			var eds=ds.getModifiedRecords().slice(0);
			for(var i = 0;i<eds.length;i++){
				record =eds[i];
				if (record.get("id")==-1) {
					buffalo.remoteCall("houseChargeService.createFamilyMember",[record.get("name")],function(reply) {
						var sucess = reply.getResult();
						if (sucess==1) {
							alert("重复姓名!");
						} else {
							if (sucess!=0) {
								alert("保存失败!");
							} else {
								record.commit();
							}
						}
					});
				} else {
					buffalo.remoteCall("houseChargeService.updateFamilyMember",[record.get("id"),record.get("name")],function(reply) {
						var sucess = reply.getResult();
						if (sucess==1) {
							alert("重复姓名!");
						} else {
							if (sucess!=0) {
								alert("保存失败!");
							} else {
								record.commit();
							}
						}
					});
				}
			}
		}


		function doDel(){
			if(gridPanel.selModel.hasSelection()){
				Ext.MessageBox.confirm('Message', '确定删除吗?', doDelDetail);	
			} else {
				Ext.MessageBox.alert('Error', '请选中一行!');
			}
		}     
	
		function doDelDetail(btn)	{
			if (btn == 'yes') {
				var record = ds.getAt(gridPanel.selModel.getSelectedCell()[0]);
				if (record.get("id")==-1) {
					ds.remove(record);
				} else {
					buffalo.remoteCall("houseChargeService.deleteFamilyMember",[record.get("id")],function(reply) {
						var sucess = reply.getResult();
						if (sucess!=0) {
							alert(" 删除失败!");
						} else {
							ds.remove(record);
						}
					});
				}
			}
		}


    }
});     	

incomeDaily.js
incomeDailyWindow = Ext.extend(Ext.app.Module, {
	init : function(){
		this.launcher = {
			text: '收入日记录',
			iconCls:'icon-grid',
			handler : this.createWindow,
			scope: this
		}
	},
    
	createWindow : function(){
		var desktop = this.app.getDesktop();
		Ext.QuickTips.init();
		Ext.form.Field.prototype.msgTarget = 'side';
		var cm = new Ext.grid.ColumnModel([
		{
			header: "收入项目",
			sortable: true,
			dataIndex: 'incomeItem_name',
			width: 100
		},{
			header: "日期",
			dataIndex: 'date',
			width:60,
			renderer:Ext.util.Format.dateRenderer('Y/m/d')
		},{
			header: "金额",
			dataIndex: 'amount',
			align: 'right',
			width: 100
		},{
			header: "家庭成员",
			dataIndex: 'familyMember_name',
			width: 80
		},{
			header: "银行",
			dataIndex: 'bankAccount_bank',
			width: 120
		},{
			header: "帐号",
			dataIndex: 'bankAccount_accountNo',
			width: 120
		},{
			header:"备注",
			dataIndex: 'remark',
			width: 80
 		}]);

		// by default columns are sortable
		cm.defaultSortable = true;

		var IncomeDaily = Ext.data.Record.create([
			{name:'id',type:'int',mapping:'id'},
			{name: 'incomeItem_name', type: 'string',mapping:'incomeItem.name'},
			{name: 'date', type: 'date',dateFormat: 'Y/m/d',mapping:'date'},
			{name: 'amount', type: 'float',mapping:'amount'},
			{name: 'familyMember_name', type: 'string',mapping:'familyMember.name'},
			{name: 'bankAccount_bank', type: 'string',mapping:'bankAccount.bank'},
			{name: 'bankAccount_accountNo', type: 'string',mapping:'bankAccount.accountNo'},
			{name: 'remark', type: 'string',mapping:'remark'}
		]);
		
		var ds = new Ext.data.Store({
			proxy: new Ext.data.DWRProxy(houseChargeService.findIncomeDaily),
			reader: new Ext.data.JsonReader({totalProperty:'total',root:'list',id:'id'},IncomeDaily),
			remoteSort: false,
		});

		var gridPanel = new Ext.grid.EditorGridPanel({
			ds:ds,
			cm: cm,
			sm: new Ext.grid.RowSelectionModel({singleSelect:true}),
			enableColLock:false,
			autoSizeColumns: true,
			buttonAlign:'top',
			tbar:[{
					text: '新增',
					handler :doAdd
				},{
					text: '查询',
					handler : doQuery
				},{
					text: '删除',
					handler : doDel
 				}],
 			bbar:new Ext.PagingToolbar({
				pageSize: 2,
				store: ds,
				displayInfo: true
           })
		});

		var win = desktop.getWindow('incomeDaily-win');
		if(!win){
 			win = desktop.createWindow({
				id: 'incomeDaily-win',
				title:'收入日记录',
				width:740,
				height:460,
				x:10,
				y:10,
				iconCls: 'icon-grid',
				shim:false,
				animCollapse:false,
				constrainHeader:true,
				layout: 'fit',
				items: gridPanel 
			});
		}
	
        win.show();
 
		function doAdd() {
			var allIncomeItem=[];
			buffalo.remoteCall("houseChargeService.findRootIncomeItem",[], function(reply) {
				getChild(reply.getResult());
				function getChild(parent) {
					if (parent.children.lengt==0) {
						return 0;
					}
					for(var i=0; i<parent.children.length; i++) {
						allIncomeItem.push([parent.children[i].id,parent.children[i].name]);
						getChild(parent.children[i]);                                 
					}
				}
			});
			
			var allFamilyMember=[];		
			buffalo.remoteCall("houseChargeService.getAllFamilyMember",[],function(reply) {
				var list = reply.getResult();
				for(var i=0; i<list.length; i++) {
					allFamilyMember.push([list[i].id,list[i].name]);
				}										
			});

			var allBankAccount=[];		
			buffalo.remoteCall("houseChargeService.getAllBankAccount",[],function(reply) {
				var list = reply.getResult();
				for(var i=0; i<list.length; i++) {
					if (list[i].bank=="现金") {
						allBankAccount.push([list[i].id,list[i].bank]);
					} else {
						allBankAccount.push([list[i].id,list[i].bank+" "+list[i].accountNo+" "+list[i].cardNo]);
					}
				}										
			});

			var addForm = new Ext.FormPanel({
				onSubmit: Ext.emptyFn,
				submit: function() {
            		this.getEl().dom.submit();
				},
      		  	labelWidth: 75, // label settings here cascade unless overridden
        		frame:true,
        		title: '',
        		//bodyStyle:'padding:5px 5px 0', ark
        		bodyStyle:'padding: 0',
        		width: 350,
        		labelSeparator:'',
	        	items: [{
	        		xtype:'combo',
					fieldLabel: '家庭成员',
					store: new Ext.data.SimpleStore({
						fields: ["id","name"],
						data: allFamilyMember
					}),
					editable: false,
					hiddenName:'familyMember_id',
					displayField:'name',
					valueField:'id',
 					typeAhead: true,
					mode: 'local',
					triggerAction: 'all',
					emptyText:'请选择家庭成员',
					selectOnFocus:true,
					resizable:true,
					allowBlank:false,
					forceSelection:true
				},{
					xtype:'datefield',
					fieldLabel: '日期',
					name: 'date',
					width: 100,
					allowBlank: false,
					format:'Y/m/d' 
				},	{
					xtype:'numberfield',
					fieldLabel: '金额',
					name: 'amount',
					width: 100,
					allowBlank: false,
					allowNegative: false,
					minValue: 0
				},{
	        		xtype:'combo',
					fieldLabel: '账户',
					store: new Ext.data.SimpleStore({
						fields: ["id","name"],
						data: allBankAccount
					}),
					editable: false,
					hiddenName:'bankAccount_id',
					displayField:'name',
					valueField:'id',
 					typeAhead: true,
					mode: 'local',
					triggerAction: 'all',
					emptyText:'请选择账户',
					selectOnFocus:true,
					resizable:true,
					allowBlank:false,
					forceSelection:true
				},{
	        		xtype:'combo',
					fieldLabel: '收入项目',
					store: new Ext.data.SimpleStore({
						fields: ["id","name"],
						data: allIncomeItem
					}),
					editable: false,
					hiddenName:'incomeItem_id',
					displayField:'name',
					valueField:'id',
 					typeAhead: true,
					mode: 'local',
					triggerAction: 'all',
					emptyText:'请选择收入项目',
					selectOnFocus:true,
					resizable:true,
					allowBlank:false,
					forceSelection:true
				},{
					xtype:'textfield',
					fieldLabel: '备注',
					name: 'remark',
					width:300
				}
				],
        		buttons: [{
					text: '保存',
					handler:function(){
						if(addForm.form.isValid()){
							var my=addForm.form.getValues();
							buffalo.remoteCall("houseChargeService.createIncomeDaily",[parseInt(my.incomeItem_id),Date.parseDate(my.date, "Y/m/d"),parseFloat(my.amount),parseInt(my.familyMember_id),parseInt(my.bankAccount_id),my.remark],function(reply) {
								var sucess = reply.getResult();
								if (sucess!=0) {
									alert("保存失败!");
								} else {
									alert("保存成功!");
								}
							});
							addWindow.close();
						}
					}    
				},{
					text: '放弃',
					handler: function(){
						addWindow.close();
					}
				}]
    		});
 			var addWindow
			if(!addWindow){
				addWindow = new Ext.Window({
					id: 'incomeDaily-add-win',
                	layout:'fit',
                	width:500,
                	height:300,
                	plain: true,
	                items:addForm 
                });
			}
        	addWindow.show(this);
			addForm.form.setValues({date:(new Date()).format("Y/m/d"),familyMember_id:'1',bankAccount_id:'1',incomeItem_id:'2'});
			addForm.form.render();
		}
		
		function doQuery() {
			var allIncomeItem=[];
			buffalo.remoteCall("houseChargeService.findRootIncomeItem",[], function(reply) {
				getChild(reply.getResult());
				function getChild(parent) {
					if (parent.children.lengt==0) {
						return 0;
					}
					for(var i=0; i<parent.children.length; i++) {
						allIncomeItem.push([parent.children[i].id,parent.children[i].name]);
						getChild(parent.children[i]);                                 
					}
				}
			});
			//alert(allIncomeItem);
			
						
			var allFamilyMember=[];		
			buffalo.remoteCall("houseChargeService.getAllFamilyMember",[],function(reply) {
				var list = reply.getResult();
				for(var i=0; i<list.length; i++) {
					allFamilyMember.push([list[i].id,list[i].name]);
				}										
			});

			var allBankAccount=[];		
			buffalo.remoteCall("houseChargeService.getAllBankAccount",[],function(reply) {
				var list = reply.getResult();
				for(var i=0; i<list.length; i++) {
					if (list[i].bank=="现金") {
						allBankAccount.push([list[i].id,list[i].bank]);
					} else {
						allBankAccount.push([list[i].id,list[i].bank+" "+list[i].accountNo+list[i].cardNo]);
					}
				}										
			});

			var queryForm = new Ext.FormPanel({
				onSubmit: Ext.emptyFn,
				submit: function() {
            		this.getEl().dom.submit();
				},
      		  	labelWidth: 75, // label settings here cascade unless overridden
        		frame:true,
        		title: '',
        		//bodyStyle:'padding:5px 5px 0', ark
        		bodyStyle:'padding: 0',
        		width: 350,
        		labelSeparator:'',
	        	items: [{
	        		xtype:'fieldset',
	        		checkboxName:'queryFamilyMember_id',
					checkboxToggle:true,
					title: '按家庭成员查询',
					autoHeight:true,
					defaults: {width: 210},
					collapsed: true,
					items :[{
	        			xtype:'combo',
						fieldLabel: '家庭成员',
						store: new Ext.data.SimpleStore({
							fields: ["id","name"],
							data: allFamilyMember
						}),
						editable: false,
						hiddenName:'familyMember_id',
						displayField:'name',
						valueField:'id',
 						typeAhead: true,
						mode: 'local',
						triggerAction: 'all',
						emptyText:'请选择家庭成员',
						selectOnFocus:true,
						resizable:true,
						allowBlank:false,
						forceSelection:true
					}]
				},{
	        		xtype:'fieldset',
					checkboxToggle:true,
	        		checkboxName:'queryDate',
					title: '按日期查询',
					autoHeight:true,
					defaults: {width: 210},
					collapsed: true,
					items :[{
						xtype:'datefield',
						fieldLabel: '日期起',
						name: 'dateFrom',
						width: 100,
						allowBlank: false,
						format:'Y/m/d' 
					},{
						xtype:'datefield',
						fieldLabel: '日期迄',
						name: 'dateTo',
						width: 100,
						allowBlank: false,
						format:'Y/m/d' 
					}]
				},{
					xtype:'fieldset',
					checkboxToggle:true,
	        		checkboxName:'queryAmount',
					title: '按金额查询',
					autoHeight:true,
					defaults: {width: 210},
					collapsed: true,
					items :[{
						xtype:'combo',
						fieldLabel: '运算符',
						store: new Ext.data.SimpleStore({
							fields: ["id","name"],
							data: [['<','小于'],['<=','小于等于'],['==','等于'],['>','大于'],['>=','大于等于']]
						}),
						editable: false,
						hiddenName:'cmp_id',
						displayField:'name',
						valueField:'id',
 						typeAhead: true,
						mode: 'local',
						triggerAction: 'all',
						emptyText:'请选择运算符',
						selectOnFocus:true,
						resizable:true,
						allowBlank:false,
						forceSelection:true
					},{
						xtype:'numberfield',
						fieldLabel: '金额',
						name: 'amount',
						width: 100,
						allowBlank: false,
						allowNegative: false,
						minValue: 0
					}]
				},{
					xtype:'fieldset',
					checkboxToggle:true,
					checkboxName:'queryBankAccount_id',
					title: '按账户查询',
					autoHeight:true,
					defaults: {width: 210},
					collapsed: true,
					items :[{
		        		xtype:'combo',
						fieldLabel: '账户',
						store: new Ext.data.SimpleStore({
							fields: ["id","name"],
							data: allBankAccount
						}),
						editable: false,
						hiddenName:'bankAccount_id',
						displayField:'name',
						valueField:'id',
 						typeAhead: true,
						mode: 'local',
						triggerAction: 'all',
						emptyText:'请选择账户',
						selectOnFocus:true,
						resizable:true,
						allowBlank:false,
						forceSelection:true
					}]
				},{
					xtype:'fieldset',
					checkboxToggle:true,
					checkboxName:'queryIncomeItem_id',
					title: '按收入项目查询',
					autoHeight:true,
					defaults: {width: 210},
					collapsed: true,
					items :[{
		        		xtype:'combo',
						fieldLabel: '收入项目',
						store: new Ext.data.SimpleStore({
							fields: ["id","name"],
							data: allIncomeItem
						}),
						editable: false,
						hiddenName:'incomeItem_id',
						displayField:'name',
						valueField:'id',
 						typeAhead: true,
						mode: 'local',
						triggerAction: 'all',
						emptyText:'请选择收入项目',
						selectOnFocus:true,
						resizable:true,
						allowBlank:false,
						forceSelection:true
					}]
				}	
				],
        		buttons: [{
					text: '查询',
					handler:function(){
						if(queryForm.form.isValid()){
							var my=queryForm.form.getValues();
							ds.proxy.dwrParams=[my.queryFamilyMember_id=='on'?true:false,parseInt(my.familyMember_id),my.queryDate=='on'?true:false,Date.parseDate(my.dateFrom, "Y/m/d"),Date.parseDate(my.dateTo, "Y/m/d"),my.queryAmount=='on'?true:false,my.cmp_id,parseFloat(my.amount),my.queryBankAccount_id=='on'?true:false,parseInt(my.bankAccount_id),my.queryIncomeItem_id=='on'?true:false,parseInt(my.incomeItem_id)];
							ds.load({params:{start:0,limit:2}});
							queryWindow.close();
						}
					}    
				},{
					text: '退出',
					handler: function(){
						queryWindow.close();
					}
				}]
    		});
 			var queryWindow
			if(!queryWindow){
				queryWindow = new Ext.Window({
					id: 'incomeDaily-query-win',
                	layout:'fit',
                	width:500,
                	height:300,
                	maximizable:true,
                	plain: true,
	                items:queryForm 
                });
			}
        	queryWindow.show(this);
			queryForm.form.setValues({incomeItem_id:'2',dateFrom:(new Date(2007,1,1)).format("Y/m/d"),dateTo:(new Date()).format("Y/m/d"),familyMember_id:'1',bankAccount_id:'1',cmp_id:'>',amount:100,});
			queryForm.form.render();
		}

		
	
		function doDel(){
			if(gridPanel.selModel.hasSelection()){
				Ext.MessageBox.confirm('Message', '确定删除吗?' , doDelDetail);	
			} else {
				Ext.MessageBox.alert('Error', '请选中一行');
			}
		}     
      
		function doDelDetail(btn)	{
			if (btn == 'yes') {
				var record =gridPanel.selModel.getSelected();
				if (record.get("id")==-1) {
					ds.remove(record);
				} else {
					buffalo.remoteCall("houseChargeService.deleteIncomeDaily",[record.get("id")],function(reply) {
						var sucess = reply.getResult();
						if (sucess!=0) {
							alert("删除失败!");
						} else {
							ds.remove(record);
					 	}
					});
				}
			}
		}

		
		
    }
});     

dwrproxy.js
Ext.data.DWRProxy = function(dwrCall,dwrParams){
	Ext.data.DWRProxy.superclass.constructor.call(this);
	this.dwrCall = dwrCall;
	this.dwrParams=dwrParams||[];
};

Ext.extend(Ext.data.DWRProxy, Ext.data.DataProxy, {
	load : function(params, reader, callback, scope, arg) {
	    var self = this;
 		if(this.fireEvent("beforeload", this, params) !== false) {
			var delegate = this.loadResponse.createDelegate(this, [reader, callback, scope, arg], 1);
			arg.params=arg.params||{};
			var allParams=[arg.params.start||0,arg.params.limit||2].concat(this.dwrParams);
			allParams.push(delegate);
			this.dwrCall.apply(this,allParams);
		} else {
			callback.call(scope || this, null, arg, false);
		}
	},
		
	loadResponse : function(listRange, reader, callback, scope, arg) {
		var result;
		try {
			result = reader.readRecords(listRange);
		} catch(e) {
			this.fireEvent("loadexception", this, null,listRange, e);
			callback.call(scope, null, arg, false);
			return;
		}
		callback.call(scope, result, arg, true);
	}
	
});






  • 大小: 59.7 KB
  • 大小: 64.7 KB
  • 大小: 77 KB
分享到:
评论
24 楼 struas 2008-10-24  
你真强,我也正在搞这个
23 楼 douko 2008-03-27  
楼主不在????????????
22 楼 douko 2008-03-26  
请问楼主,我把程序放在jb2006里面运行,发现少了很多包
能不能把你得饱都贴上了?
21 楼 ht8206 2007-12-24  
楼主,把打一个war包让小弟们看看,小弟水平太次,没运行起来。或者发个邮件把:ht8206@163.com
20 楼 zlsunnan 2007-12-20  
感谢分享 值得学习
19 楼 rain16881 2007-12-19  
Ext.data.DWRProxy = function(dwrCall,dwrParams){
Ext.data.DWRProxy.superclass.constructor.call(this);
this.dwrCall = dwrCall;
this.dwrParams=dwrParams||[];
};

Ext.extend(Ext.data.DWRProxy, Ext.data.DataProxy, {
load : function(params, reader, callback, scope, arg) {
    var self = this;
if(this.fireEvent("beforeload", this, params) !== false) {
var delegate = this.loadResponse.createDelegate(this, [reader, callback, scope, arg], 1);
arg.params=arg.params||{};
var allParams=[arg.params.start||0,arg.params.limit||2].concat(this.dwrParams);
allParams.push(delegate);
this.dwrCall.apply(this,allParams);
} else {
callback.call(scope || this, null, arg, false);
}
},

loadResponse : function(listRange, reader, callback, scope, arg) {
var result;
try {
result = reader.readRecords(listRange);
alert(result.total);//显示出来看一看 } catch(e) {
this.fireEvent("loadexception", this, null,listRange, e);
callback.call(scope, null, arg, false);
return;
}
callback.call(scope, result, arg, true);
}

});

加粗的地方也没有反应..一直是Loading..
18 楼 rain16881 2007-12-19  
//#DWR-INSERT

//#DWR-REPLY

var s0=[];var s1={};var s3={};var s2={};var s4={};s0[0]=s1;s0[1]=s2;

s1.classInfo="fds";s1.className="05ACCP3";s1.id="402881f016528bf30116528c93f90002";s1.userCollege=s3

;

s3.collegeInfo="\u6539\u4E0B\u4E5F";s3.collegeName="\u8BA1\u7B97\u673A\u5DE5\u7A0B\u5B66\u9662";s3.id

="402881f01652384d0116523abe250003";

s2.classInfo="fsd";s2.className="fds";s2.id="402881f016c6d7070116c702e4640002";s2.userCollege=s4;

s4.collegeInfo="\u5916\u56FD\u5B66\u9662";s4.collegeName="\u5916\u56FD\u8BED\u5B66\u9662";s4.id="402881f0167b0c7501167b45d3de000a"

;

dwr.engine._remoteHandleCallback('0','0',{list:s0,total:2});
这个是fbug中的请求返回的数据

var Userclass = Ext.data.Record.create([
{name: "id", mapping: "id", type: "string"},
{name: "className", mapping: "className", type: "string"},
{name: "classInfo", mapping: "classInfo", type: "string"},
{name: "userCollege_id", mapping: "userCollege.id", type: "string"},
{name: "userCollege_collegeName", mapping: "userCollege.collegeName", type: "string"},
{name: "userCollege_collegeInfo", mapping: "userCollege.collegeInfo", type: "string"},
]);
var ds = new Ext.data.Store({
       proxy : new Ext.data.DWRProxy(classAction.findAllClass_Ajax), 
reader:  new Ext.data.JsonReader({totalProperty:'total',root:'list',id:'id'},Userclass),
remoteSort: false,
    });
var colModel  = new Ext.grid.ColumnModel(
[
new Ext.grid.RowNumberer(),
{header: "班级序号", width: 250, sortable: true, dataIndex: 'id'},
{header: "班级名字", width: 250, sortable: true, dataIndex: 'className'},
{header: "班级信息", width: 250, sortable: true, dataIndex: 'classInfo'},
{header: "学院序号", width: 250, sortable: true, dataIndex: 'userCollege_id'},
{header: "学院名字", width: 250, sortable: true, dataIndex: 'userCollege_collegeName'},
{header: "学院信息", width: 250, sortable: true, dataIndex: 'userCollege_collegeInfo'},
]
);
colModel.defaultSortable=true;

var ClassManageEditorGridPanel = new Ext.grid.EditorGridPanel({
                        store: ds,
                        cm: colModel,
                        //selModel: new Ext.grid.RowSelectionModel(),
                        sm: new Ext.grid.RowSelectionModel({singleSelect:true}),
                        loadMask :true,
                        autoSizeColumns: true,
                        enableColLock:false,
buttonAlign:'top', 
tbar:
[{ 

        text: '新增', 
        handler :doAdd 
    },{ 
        text: '删除', 
        handler : doDel 
    },collegesortComboBox
    ] 
                    });

if(!win){
            win = desktop.createWindow({
                id: 'grid-win-classmanage',
                title:'班级管理',
                width:740,
                height:480,
                iconCls: 'icon-grid',
                shim:false,
                animCollapse:false,
                constrainHeader:true,

                layout: 'fit',
                items:
                    ClassManageEditorGridPanel
            });
        }
        ds.load();
        win.show();

请问..为什么数据可以得到了..但是还不能在grid中有数据..
grid一直都是Loading.....

是reader的问题吗?
谢谢了..请指教
17 楼 ksgimi 2007-12-17  
to:
thomasg:抱歉!我未在ie下测试。
to:
laiseeme:我用eclipse3.2 +jetty 指定context为web context就可以
http://jettylauncher.sourceforge.net/updates/
to:rain16881
关键是record定义var IncomeDaily = Ext.data.Record.create(...
]);
var ds = new Ext.data.Store({
proxy: new Ext.data.DWRProxy(houseChargeService.findIncomeDaily),
reader: new Ext.data.JsonReader({totalProperty:'total',root:'list',id:'id'},IncomeDaily),
remoteSort: false,
});
指定jsonReader为reader, 返回查询总数在total栏位 明细数据在list
你可以显示出来看一看或用firebug返回数据与record定义是否一致。
dwrproxy中加入alert
loadResponse : function(listRange, reader, callback, scope, arg) {
var result;
try {
result = reader.readRecords(listRange);
            alert(result.total);//显示出来看一看
} catch(e) {
this.fireEvent("loadexception", this, null,listRange, e);
callback.call(scope, null, arg, false);
return;
}
callback.call(scope, result, arg, true);
}
16 楼 rain16881 2007-12-16  
楼主..有空可以讲一下那个dwrproxy吗?
我怎么不能读出数据..那些字段要和那里对映啊?和mapping
那对映?
如果有空..就你的例子说一下好吗?
15 楼 thomasg 2007-12-14  
在IE6下有脚本错误,菜单无法显示.错误信息是: 'bandAccountWindow'未定义.

在Firefox下可以.
14 楼 laiseeme 2007-12-14  
看晕了,一下子用的东西太多了吧,麻烦把项目重新整理了一下,可能我是初学者,弄了半天没有运行起来
13 楼 ericsheng 2007-12-07  
能不能提供怎么样开发和部署。期待中...
12 楼 ststst 2007-12-05  
too good
11 楼 philip_kissme 2007-12-04  
fa个war包上来 你发的项目 ant脚本是错的
10 楼 nitc_007 2007-12-03  
非常感谢楼主!
9 楼 huahui 2007-12-03  
LZ 把源码打包共享!  谢谢LZ
8 楼 ksgimi 2007-12-03  
buffaloext.js
// For Buffalo-EXT integration

//

Buffalo.Ext = {};

//Usage: new Buffalo.Ext.DataProxy(buffalo, "myService.method", [param1, param2])
Buffalo.Ext.DataProxy = function(buffalo, service, params) {
    Buffalo.Ext.DataProxy.superclass.constructor.call(this);
    this.buffalo = buffalo;
    this.service =  service;
    this.params = params;
}

Ext.extend(Buffalo.Ext.DataProxy, Ext.data.DataProxy, {
   
    load : function(params, reader, callback, scope, arg){
        var self = this;
        if (this.fireEvent("beforeload", this, params) != false) {
            this.buffalo.remoteCall(this.service, this.params, function(reply) {
                if (reply.isFault()) {
                    // This should be processed in buffalo events...
                   // alert(reply.getSource());
                    return;
                }
                // let the reader to read the returned object.
                var result = reader.readRecords(reply.getResult()); 
                self.fireEvent("load", this, null, arg);
                callback.call(scope, result, arg, true);
            });
        } else {
            callback.call(scope || this, "", arg, false);
        }
    } 
});


还需那个文件说一下。我将全部代码用zip打包,供参考。
测试时,用户:parent 密码:parent
7 楼 rain16881 2007-12-02  
var ds = new Ext.data.Store({  
            proxy: new Buffalo.Ext.DataProxy(buffalo,"houseChargeService.getAllFamilyMember",[]),  
            reader: new Ext.data.ArrayReader({id: 'id'}, FamilyMember),  
            // turn off remote sorting  
            remoteSort: false 
        });

Buffalo.Ext.DataProxy这个东东是那个js的啊?
楼主有好多js没出来..可以发全一点吗?
6 楼 heartbeatboy 2007-11-28  
上传一下代码,谢谢!
5 楼 yaofei 2007-11-26  
楼主打包一下,方便大家下载啊

相关推荐

    电力系统中基于MATLAB的价格型需求响应与电价弹性矩阵优化

    内容概要:本文详细介绍了如何利用MATLAB进行价格型需求响应的研究,特别是电价弹性矩阵的构建与优化。文章首先解释了电价弹性矩阵的概念及其重要性,接着展示了如何通过MATLAB代码实现弹性矩阵的初始化、负荷变化量的计算以及优化方法。文中还讨论了如何通过非线性约束和目标函数最小化峰谷差,确保用户用电舒适度的同时实现负荷的有效调节。此外,文章提供了具体的代码实例,包括原始负荷曲线与优化后负荷曲线的对比图,以及基于历史数据的参数优化方法。 适合人群:从事电力系统优化、能源管理及相关领域的研究人员和技术人员。 使用场景及目标:适用于希望深入了解并掌握价格型需求响应机制的专业人士,旨在帮助他们更好地理解和应用电价弹性矩阵,优化电力系统的负荷分布,提高能源利用效率。 其他说明:文章强调了实际应用中的注意事项,如弹性矩阵的动态校准和用户价格敏感度的滞后效应,提供了实用的技术细节和实践经验。

    一级医院医疗信息管理系统安装调试技术服务合同20240801.pdf

    一级医院医疗信息管理系统安装调试技术服务合同20240801.pdf

    表5 文献综述.doc

    表5 文献综述.doc

    36W低压输入正激电源, 正激变压器设计方法步骤及谐振电感的设计方法,主要讲诉了正激电源变压器测的输入输出参数,按输入的条件设计相关的变压器的参数,同时将输出电感的设计方法一并例出,详细的设计步骤

    36W低压输入正激电源 变压器电感设计

    基于YOLOv8的深度学习课堂行为检测系统源码(含检测图片和视频)

    基于YOLOv8的深度学习课堂行为检测系统源码,软件开发环境python3.9,系统界面开发pyqt5。在使用前安装python3.9,并安装软件所需的依赖库,直接运行MainProgram.py文件即可打开程序。模型训练时,将train,val数据集的绝对路径改为自己项目数据集的绝对路径,运行train.py文件即可开始进行模型训练,内含项目文件说明,以及检测图片和视频。

    odbc-oracle zabbix模版原版

    odbc_oracle zabbix模版原版

    基于纳什谈判理论的风光氢多主体能源系统合作运行方法——综合能源交易与优化模型

    内容概要:本文探讨了利用纳什谈判理论来优化风光氢多主体能源系统的合作运行方法。通过MATLAB代码实现了一个复杂的优化模型,解决了风电、光伏和氢能之间的合作问题。文中详细介绍了ADMM(交替方向乘子法)框架的应用,包括联盟效益最大化和收益分配谈判两个子任务。此外,还涉及了加权残差计算、目标函数构造、可视化工具以及多种博弈模式的对比等功能模块。实验结果显示,合作模式下系统总成本显著降低,氢能利用率大幅提升。 适合人群:从事能源系统研究的专业人士、对博弈论及其应用感兴趣的学者和技术人员。 使用场景及目标:适用于需要优化多主体能源系统合作运行的场合,如工业园区、电网公司等。主要目标是提高能源利用效率,降低成本,增强系统的灵活性和稳定性。 其他说明:代码中包含了丰富的可视化工具,能够帮助研究人员更好地理解和展示谈判过程及结果。同时,提供了多种博弈模式的对比功能,便于进行性能评估和方案选择。

    C#与Halcon联合编程实现高效视觉几何定位与测量框架

    内容概要:本文详细介绍了如何利用C#与Halcon联合编程构建高效的视觉几何定位与测量框架。主要内容涵盖模板创建与匹配、圆测量、数据持久化以及图像采集等方面的技术细节。首先,通过创建形状模板并进行匹配,实现了工件的精确定位。接着,针对圆形物体的测量,提出了动态ROI绘制、亚像素边缘提取和稳健圆拟合的方法。此外,还讨论了模板管理和图像采集的最佳实践,确保系统的稳定性和高效性。最后,强调了Halcon对象的内存管理和错误处理机制,提供了实用的优化建议。 适合人群:具备一定编程基础,尤其是对C#和Halcon有一定了解的研发人员和技术爱好者。 使用场景及目标:适用于工业生产线上的自动化检测设备开发,旨在提高工件定位和尺寸测量的精度与效率。主要目标是帮助开发者掌握C#与Halcon联合编程的具体实现方法,从而构建稳定可靠的视觉检测系统。 其他说明:文中提供了大量实战代码片段和调试技巧,有助于读者快速理解和应用相关技术。同时,作者分享了许多实际项目中的经验和教训,使读者能够避开常见陷阱,提升开发效率。

    QT6 C++视频播放器实现(基于QGraphicsVideo)

    QT视频播放器实现(基于QGraphicsView)

    评估管线钢环焊缝质量及其对氢脆的敏感性.pptx

    评估管线钢环焊缝质量及其对氢脆的敏感性.pptx

    机器学习(预测模型):专注于 2024 年出现的漏洞(CVE)信息数据集

    该是一个在 Kaggle 上发布的数据集,专注于 2024 年出现的漏洞(CVE)信息。以下是关于该数据集的详细介绍:该数据集收集了 2024 年记录在案的各类漏洞信息,涵盖了漏洞的利用方式(Exploits)、通用漏洞评分系统(CVSS)评分以及受影响的操作系统(OS)。通过整合这些信息,研究人员和安全专家可以全面了解每个漏洞的潜在威胁、影响范围以及可能的攻击途径。数据主要来源于权威的漏洞信息平台,如美国国家漏洞数据库(NVD)等。这些数据经过整理和筛选后被纳入数据集,确保了信息的准确性和可靠性。数据集特点:全面性:涵盖了多种操作系统(如 Windows、Linux、Android 等)的漏洞信息,反映了不同平台的安全状况。实用性:CVSS 评分提供了漏洞严重程度的量化指标,帮助用户快速评估漏洞的优先级。同时,漏洞利用信息(Exploits)为安全研究人员提供了攻击者可能的攻击手段,有助于提前制定防御策略。时效性:专注于 2024 年的漏洞数据,反映了当前网络安全领域面临的新挑战和新趋势。该数据集可用于多种研究和实践场景: 安全研究:研究人员可以利用该数据集分析漏洞的分布规律、攻击趋势以及不同操作系统之间的安全差异,为网络安全防护提供理论支持。 机器学习与数据分析:数据集中的结构化信息适合用于机器学习模型的训练,例如预测漏洞的 CVSS 评分、识别潜在的高危漏洞等。 企业安全评估:企业安全团队可以参考该数据集中的漏洞信息,结合自身系统的实际情况,进行安全评估和漏洞修复计划的制定。

    QML Combobox 自动过滤,输入字符串后自动匹配

    博客主页:https://blog.csdn.net/luoyayun361 QML ComboBox控件,输入关键字后自动过滤包含关键字的列表,方便快速查找列表项

    【人工智能领域】人工智能技术发展历程、核心原理及应用指南:涵盖机器学习、深度学习、NLP和计算机视觉的全面介绍

    内容概要:本文全面介绍了人工智能技术的发展历程、核心技术原理、应用方法及其未来趋势。首先阐述了人工智能的定义和核心目标,随后按时间顺序回顾了其从萌芽到爆发的五个发展阶段。接着详细讲解了机器学习、深度学习、自然语言处理和计算机视觉等核心技术原理,并介绍了使用现成AI服务和开发自定义AI模型的应用方法。此外,还展示了智能客服系统、图像分类应用和智能推荐系统的具体实现案例。针对普通用户,提供了使用大模型的指南和提问技巧,强调了隐私保护、信息验证等注意事项。最后展望了多模态AI、可解释AI等未来发展方向,并推荐了相关学习资源。; 适合人群:对人工智能感兴趣的初学者、技术人员以及希望了解AI技术应用的普通大众。; 使用场景及目标:①帮助初学者快速了解AI的基本概念和发展脉络;②为技术人员提供核心技术原理和应用方法的参考;③指导普通用户如何有效地使用大模型进行日常查询和任务处理。; 其他说明:本文不仅涵盖了AI技术的基础知识,还提供了丰富的实际应用案例和实用技巧,旨在帮助读者全面理解人工智能技术,并能在实际工作中加以应用。同时提醒读者关注AI伦理和版权问题,确保安全合法地使用AI工具。

    本学习由 Matrix 工作室制作并开发,包括算法与数据结构的学习路线和各种题解

    本学习由 Matrix 工作室制作并开发,包括算法与数据结构的学习路线和各种题解。

    基于智慧图书馆基础业务流程Axure11高保真原型设计

    本项目致力于构建基于微服务架构的智慧图书馆管理平台,重点突破多校区图书馆异构系统间的数据壁垒。通过建立统一数据治理规范、部署智能分析模块、重构业务流程引擎,系统性实现以下建设目标:构建跨馆业务数据的标准化整合通道,实施容器化部署的弹性资源管理体系,开发具备机器学习能力的业务辅助决策系统,打造可量化评估的管理效能提升模型,最终形成支持PB级数据处理的分布式存储体系与全维度数据资产图谱。

    mysql中慢sql分析

    根据processlist查询出慢sql 1.修改配置文件中的mysql链接 2.目前是15秒执行一次获取执行时间在5秒上的sql,可以在配置中修改 3.执行后查出的慢sql会记录到log文件夹中以日期命名的txt文件中,可自行查验

    全域通航 低空经济服务平台建设实施方案.pptx

    全域通航 低空经济服务平台建设实施方案.pptx

    全国联合交通查询手册,涵盖各大城市

    全国交通一卡通互联互通服务手册,支持在线查询

    电力电子中移相全桥DC-DC变换器的Simulink离散化建模与优化

    内容概要:本文详细介绍了如何在Simulink中进行移相全桥DC-DC变换器的离散化建模及其优化。主要内容包括搭建主电路、PWM波形生成、数字PI调节器的设计以及针对负载突变情况下的闭环控制优化。文中特别强调了移相控制、死区时间设置、采样周期选择、积分限幅、前馈补偿等关键技术点的应用,确保在极端负载条件下(如从3kW突变为3.6W)输出电压仍能保持稳定。此外,作者还分享了许多实践经验,如避免非线性磁化曲线带来的数值振荡、合理设置仿真步长等。 适合人群:从事电力电子研究或开发的技术人员,尤其是对移相全桥变换器感兴趣的研究者和技术爱好者。 使用场景及目标:适用于需要深入了解移相全桥DC-DC变换器工作原理及其在Simulink环境下的离散化建模和优化的人群。目标是掌握如何通过合理的参数设定和算法改进,使系统能够在复杂工况下保持良好的性能。 其他说明:文中提供了大量具体的Matlab/Simulink代码片段,帮助读者更好地理解和实践相关概念。同时,作者也指出了许多常见的陷阱和注意事项,有助于初学者少走弯路。

    西门子S7-1200 PLC污水处理项目的博途V17程序设计与优化

    内容概要:本文详细介绍了西门子S7-1200 PLC在污水处理项目中的应用,涵盖模拟量处理、设备轮换、Modbus通讯控制以及事件记录等多个方面。具体包括:使用4-20mA超声波传感器进行液位检测并采用滑动窗口滤波法处理信号,确保液位波动控制在±2cm以内;通过SCL代码实现两组提升泵的智能轮换,避免长时间连续运行带来的设备损耗;利用Modbus TCP和RTU协议对变频器进行精确控制,确保鼓风机和其他设备的稳定运行;采用ALARM_S函数和循环存储队列实现高效的报警管理和事件记录。此外,文中还分享了许多实际操作中的经验和技巧,如硬件滤波与软件校验结合、防止设备同时启动的延时机制等。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是熟悉西门子PLC编程和博途软件使用的专业人士。 使用场景及目标:适用于污水处理厂或其他类似工业环境中,旨在提高PLC系统的稳定性和可靠性,减少维护成本,延长设备使用寿命。通过对文中提供的代码片段和实践经验的学习,可以帮助工程师更好地理解和掌握PLC编程技巧,从而应用于实际工程项目中。 其他说明:文中不仅提供了具体的编程实例,还分享了很多宝贵的实战经验,如如何处理传感器异常、优化通讯协议配置等。这些内容对于初学者来说是非常宝贵的知识财富,能够帮助他们快速成长并在工作中游刃有余。

Global site tag (gtag.js) - Google Analytics