论坛首页 Web前端技术论坛

我的ext范例

浏览 24278 次
锁定老帖子 主题:我的ext范例
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-11-20  
本人学习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
   发表时间:2007-11-20  
buffalo 处理javascript->java很好,但处理java->javascript时不够细腻,比如日期类型。dwr则好一些。
ExtGridResult.java

package com.ark.common.domain;
import java.util.List;

public class ExtGridResult<E> {
	private int total;
	private List<E> list;
	
	public ExtGridResult(int total,List<E> list) {
		this.total=total;
		this.list=list;
	}

	public int getTotal() {
		return total;
	}

	public void setTotal(int total) {
		this.total = total;
	}

	public List<E> getList() {
		return list;
	}

	public void setList(List<E> list) {
		this.list = list;
	}
	
}

HouseChargeServiceImpl.java
package com.ark.housecharge.service.impl;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import com.ark.common.domain.Entity;
import com.ark.common.domain.ExtGridResult;
import com.ark.common.service.impl.BaseServiceImpl;
import com.ark.housecharge.domain.ChargeItem;
import com.ark.housecharge.domain.IncomeItem;
import com.ark.housecharge.domain.BankAccount;
import com.ark.housecharge.domain.FamilyMember;
import com.ark.housecharge.domain.TransferDaily;
import com.ark.housecharge.domain.IncomeDaily;
import com.ark.housecharge.domain.ConsumeDaily;
import com.ark.housecharge.service.HouseChargeService;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.criterion.Restrictions;
import org.hibernate.criterion.Criterion; 

public class HouseChargeServiceImpl extends BaseServiceImpl implements HouseChargeService {
    private static final Log log = LogFactory.getLog(HouseChargeServiceImpl.class);

    public int createFamilyMember(String name) {
		FamilyMember familyMember=new FamilyMember();
		familyMember.setName(name);
   		this.create(familyMember);
		return 0;
	}

    public int updateFamilyMember(Long id,String name) {
		FamilyMember familyMember=(FamilyMember)this.loadById(FamilyMember.class,id);
		familyMember.setName(name);
   		this.create(familyMember);
   		return 0;
	}

	public int deleteFamilyMember(Long id) {
		FamilyMember familyMember=(FamilyMember)this.loadById(FamilyMember.class,id);
		this.delete(familyMember);	
		return 0;
	}
	
	public List<FamilyMember> getAllFamilyMember() {
		return (List<FamilyMember>)(this.findAll(FamilyMember.class));
	}

	public int createBankAccount(String bank,String accountNo,String cardNo,Date openDate,float openAmount){
		BankAccount bankAccount=new BankAccount();
		bankAccount.setBank(bank);
		bankAccount.setAccountNo(accountNo);
		bankAccount.setCardNo(cardNo);
		bankAccount.setOpenDate(openDate);
		bankAccount.setOpenAmount(openAmount);
		bankAccount.setBalDate(openDate);
		bankAccount.setBalAmount(openAmount);
		this.create(bankAccount);
		return 0;
	}

	public int updateBankAccount(Long id,String bank,String accountNo,String cardNo) {
		BankAccount bankAccount=(BankAccount)this.loadById(BankAccount.class,id);
		bankAccount.setBank(bank);
		bankAccount.setAccountNo(accountNo);
		bankAccount.setCardNo(cardNo);
		this.update(bankAccount);
		return 0;
	}

	public int deleteBankAccount(Long id) {
		BankAccount bankAccount=(BankAccount)this.loadById(BankAccount.class,id);
		this.delete(bankAccount);	
		return 0;
	}
	
	public List<BankAccount> getAllBankAccount() {
		return (List<BankAccount>)(this.findAll(BankAccount.class));
	}
	
    public ChargeItem createChargeItem(int parentId,String chargeName) {
    	ChargeItem parentChargeItem=(ChargeItem)this.loadById(ChargeItem.class,new Long(parentId));
    	ChargeItem chargeItem=new ChargeItem();
    	chargeItem.setParent(parentChargeItem);
    	chargeItem.setName(chargeName);
   		this.create(chargeItem);
    	return chargeItem;
    }

    public ChargeItem updateChargeItem(int id,String chargeName) {
    	ChargeItem chargeItem=(ChargeItem)this.loadById(ChargeItem.class,new Long(id));
    	chargeItem.setName(chargeName);
   		this.update(chargeItem);
    	return chargeItem;
    }

    public int deleteChargeItem(int id) {
    	ChargeItem chargeItem=(ChargeItem)this.loadById(ChargeItem.class,new Long(id));
    	this.delete(chargeItem);
    	return 0;
    }

    private void createRootChargeItem(){
    	log.info("begin execute createRootChargeItem ");
        ChargeItem chargeItem=new ChargeItem();
        chargeItem.setName(ChargeItem.ROOT_ITEM_NAME);
        super.create((Entity)chargeItem);
    	log.info("end execute createRootChargeItem ");
       }
    
    public ChargeItem findRootChargeItem() {
    	List<ChargeItem> list=super.find(ChargeItem.class,Restrictions.isNull("parent"));
        if (list==null||list.isEmpty()){
        	createRootChargeItem();
        	return findRootChargeItem();
        } else {
        	return list.get(0);
        }
    }  
    

    public IncomeItem createIncomeItem(int parentId,String incomeName) {
    	IncomeItem parentIncomeItem=(IncomeItem)this.loadById(IncomeItem.class,new Long(parentId));
    	IncomeItem incomeItem=new IncomeItem();
    	incomeItem.setParent(parentIncomeItem);
    	incomeItem.setName(incomeName);
   		this.create(incomeItem);
    	return incomeItem;
    }
    

    public IncomeItem updateIncomeItem(int id,String incomeName) {
    	IncomeItem incomeItem=(IncomeItem)this.loadById(IncomeItem.class,new Long(id));
    	incomeItem.setName(incomeName);
   		this.update(incomeItem);
    	return incomeItem;
    }

    public int deleteIncomeItem(int id) {
    	IncomeItem incomeItem=(IncomeItem)this.loadById(IncomeItem.class,new Long(id));
    	this.delete(incomeItem);
    	return 0;
    }

    private void createRootIncomeItem(){
    	IncomeItem incomeItem=new IncomeItem();
    	incomeItem.setName(IncomeItem.ROOT_ITEM_NAME);
        super.create((Entity)incomeItem);
    }

    public IncomeItem findRootIncomeItem() {
    	List<IncomeItem> list=super.find(IncomeItem.class,Restrictions.isNull("parent"));
        if (list==null||list.isEmpty()){
        	createRootIncomeItem();
        	return findRootIncomeItem();
        } else {
        	return list.get(0);
        }
    }  

    
    public int createIncomeDaily(int incomeItem_id,Date date,Float amount, int familyMember_id, int bankAccount_id,String remark) {
    	IncomeItem incomeItem=(IncomeItem)this.loadById(IncomeItem.class,new Long(incomeItem_id));
    	FamilyMember familyMember=(FamilyMember)this.loadById(FamilyMember.class,new Long(familyMember_id));
    	BankAccount bankAccount=(BankAccount)this.loadById(BankAccount.class,new Long(bankAccount_id));
    	IncomeDaily incomeDaily=new IncomeDaily();
    	incomeDaily.setAmount(amount);
    	incomeDaily.setDate(date);
    	incomeDaily.setIncomeItem(incomeItem);
    	incomeDaily.setBankAccount(bankAccount);
        incomeDaily.setFamilyMember(familyMember);
        incomeDaily.setRemark(remark);
    	bankAccount.incomeAmount(incomeDaily.getDate(),incomeDaily.getAmount());
        super.update(bankAccount);
        super.create(incomeDaily);
        return 0;
    }
    
    public int deleteIncomeDaily(int incomeDaily_id) {
    	IncomeDaily incomeDaily=(IncomeDaily)this.loadById(IncomeDaily.class,new Long(incomeDaily_id));
    	incomeDaily.getBankAccount().deIncomeAmount(incomeDaily.getDate(),incomeDaily.getAmount());
        super.update(incomeDaily.getBankAccount());
        super.delete(incomeDaily);
        return 0;
    } 
    
    public int updateIncomeDaily(int incomeDaily_id, int incomeItem_id,Date date,Float amount, int familyMember_id, int bankAccount_id,String remark) {
    	IncomeDaily incomeDaily=(IncomeDaily)this.loadById(IncomeDaily.class,new Long(incomeDaily_id));
    	incomeDaily.getBankAccount().deIncomeAmount(incomeDaily.getDate(), incomeDaily.getAmount());
        super.update(incomeDaily.getBankAccount());
    	IncomeItem incomeItem=(IncomeItem)this.loadById(IncomeItem.class,new Long(incomeItem_id));
    	FamilyMember familyMember=(FamilyMember)this.loadById(FamilyMember.class,new Long(familyMember_id));
    	BankAccount bankAccount=(BankAccount)this.loadById(BankAccount.class,new Long(bankAccount_id));
    	incomeDaily.setAmount(amount);
    	incomeDaily.setDate(date);
    	incomeDaily.setIncomeItem(incomeItem);
    	incomeDaily.setBankAccount(bankAccount);
        incomeDaily.setFamilyMember(familyMember);
    	bankAccount.incomeAmount(incomeDaily.getDate(),incomeDaily.getAmount());
        super.update(bankAccount);
        super.update(incomeDaily);
        return 0;
    }  

    public  ExtGridResult<IncomeDaily> findIncomeDaily(int start,int limit,Boolean queryFamilyMember_id,int familyMember_id,Boolean queryDate,Date dateFrom,Date dateTo,Boolean queryAmount,String cmp_id,Float amount, Boolean queryBankAccount_id,int bankAccount_id,Boolean queryIncomeItem_id,int incomeItem_id) {
    	List<Criterion> clist=new ArrayList<Criterion>();
    	if (queryFamilyMember_id) {
    		clist.add(Restrictions.eq("familyMember.id",familyMember_id));
    	} 
    	if (queryDate) {
            clist.add(Restrictions.between("date",dateFrom,dateTo));
    	}  	
    	if (queryAmount) {
    		clist.add(Restrictions.sqlRestriction(" amount"+ cmp_id+amount.toString()));
    	}
    	if (queryBankAccount_id) {
    		clist.add(Restrictions.eq("bankAccount.id",bankAccount_id));
    	}
    	if (queryIncomeItem_id) {
    		clist.add(Restrictions.eq("incomeItem.id",incomeItem_id));
    	}
    	return super.find(IncomeDaily.class,clist,start,limit);
    }
}

BaseServiceImpl.java
package com.ark.common.service.impl;
import java.io.Serializable;
import java.sql.SQLException;
import java.util.List;
import com.ark.common.domain.NamedEntity;
import com.ark.common.service.BaseService;
import com.ark.common.domain.ExtGridResult;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Restrictions;
import org.hibernate.criterion.Projections;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

public class BaseServiceImpl extends HibernateDaoSupport implements BaseService{
	protected static final Log log = LogFactory.getLog(BaseServiceImpl.class);

	@SuppressWarnings("unchecked") 
    public <T>  T loadById(final Class<T> cls,Serializable id) {
    	return (T) getHibernateTemplate().get(cls,id);
    }
    @SuppressWarnings("unchecked") 
    public<T> T loadByName(final Class<? extends NamedEntity> cls,final String name) {
        return (T)getHibernateTemplate().execute(new HibernateCallback() {
            public T doInHibernate(Session session) throws HibernateException, SQLException {
                Criteria criteria = session.createCriteria(cls);
                criteria.add(Restrictions.eq("name",name));
                List<T> list=criteria.list();
                if (list==null||list.isEmpty()){
                    return null;
                } else {
                    return (T)list.get(0);
                }
            }
        });
    }
    
    public void create(Object entity) {
        getHibernateTemplate().save(entity);
    }

    public void update(Object entity) {
        getHibernateTemplate().update(entity);
    }

    public void delete(Object entity) {
        getHibernateTemplate().delete(entity);
    }

    @SuppressWarnings("unchecked") 
    public <T> List<T> findAll(final Class<T> cls) {
        return getHibernateTemplate().find("from " + cls.getName());
    }

    @SuppressWarnings("unchecked") 
    public <T> List<T>  find(final Class<T> cls,final Criterion c) {
        return (List<T>) getHibernateTemplate().execute(new HibernateCallback() {
            public List<T> doInHibernate(Session session) throws HibernateException, SQLException {
                return session.createCriteria(cls).add(c).list();
            }
        });
    }

    @SuppressWarnings("unchecked") 
    public <T> List<T>  find(final Class<T> cls,final List<Criterion> list) {
        return (List<T>) getHibernateTemplate().execute(new HibernateCallback() {
            public List<T> doInHibernate(Session session) throws HibernateException, SQLException {
                Criteria criteria = session.createCriteria(cls);
                for (Criterion c:list) {
                	criteria.add(c);
                }
                return criteria.list();
            }
        });
    }
    
    @SuppressWarnings("unchecked") 
    public <T> ExtGridResult<T>  find(final Class<T> cls,final List<Criterion> list,final int start,final int limit) {
        return (ExtGridResult<T>) getHibernateTemplate().execute(new HibernateCallback() {
            public ExtGridResult<T> doInHibernate(Session session) throws HibernateException, SQLException {
                Criteria criteria = session.createCriteria(cls);
                for (Criterion c:list) {
                	criteria.add(c);
                }
                int total=(Integer)criteria.setProjection(Projections.rowCount()).uniqueResult();
        		criteria.setProjection(null);  
        		List<T> list= criteria.setFirstResult(start).setMaxResults(limit).list(); 
        		return new ExtGridResult(total,list);
            }
        });
    }
}
  • 大小: 73.8 KB
  • 大小: 64.3 KB
0 请登录后投票
   发表时间:2007-11-20  
application_context.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	     xmlns:aop="http://www.springframework.org/schema/aop"
	     xmlns:tx="http://www.springframework.org/schema/tx"
	     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
           
	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
		<property name="driverClassName"><value>org.hsqldb.jdbcDriver</value></property>
		<property name="url"><value>jdbc:hsqldb:data/database</value></property>
		<property name="username"><value>sa</value></property>
		<property name="password"><value></value></property>
	</bean>

	<bean id="hibernateProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
		<property name="properties">
			<props>
				<prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop>
				<prop key="hibernate.show_sql">true</prop>
				<prop key="hibernate.hbm2ddl.auto">update</prop>
				<prop key="hibernate.cache.use_query_cache">true</prop>
			</props>
		</property>
	</bean>
    
	<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
		<property name="dataSource"><ref bean="dataSource"/></property>
		<property name="mappingResources">
			<list>
				<value>com/ark/common/domain/Entity.hbm.xml</value>
				<value>com/ark/housecharge/domain/Entity.hbm.xml</value>
			</list>
		</property>
		<property name="hibernateProperties"><ref bean="hibernateProperties"/></property>
	</bean>

	<!-- Transaction manager for a single Hibernate SessionFactory (alternative to JTA) -->
	<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="sessionFactory"><ref local="sessionFactory"/></property>
	</bean>

	<aop:config>  
		<aop:advisor pointcut="execution(* com.ark.housecharge.service..*.*(..))" advice-ref="txAdvice"/>
		<!--  
		<aop:advisor pointcut="execution(* com.ark.common.service..*.*(..))" advice-ref="txAdvice"/>
		-->  
	</aop:config>
    
	<tx:advice id="txAdvice" transaction-manager="transactionManager">  
		<tx:attributes>  
			<tx:method name="loadById" read-only="true" />  
			<tx:method name="loadByName" read-only="true" />  
			<tx:method name="*"/>  
		</tx:attributes>  
	</tx:advice>  
       
	<bean id="houseChargeServiceTarget" class="com.ark.housecharge.service.impl.HouseChargeServiceImpl">
		<property name="sessionFactory" ref="sessionFactory"/>
	</bean>  
       
	<bean id="houseChargeService" class="org.springframework.aop.framework.ProxyFactoryBean">
		<property name="proxyInterfaces"><value>com.ark.housecharge.service.HouseChargeService</value></property>
		<property name="interceptorNames">
			<list>
				<idref bean="serviceManagerSecurity"/>
				<idref local="houseChargeServiceTarget"/>
			</list>
		</property>
	</bean>
	
	<bean id="securityService" class="com.ark.common.service.impl.SecurityServiceImpl">  
		<property name="sessionFactory" ref="sessionFactory"/>
	</bean>    
	  
	<bean name="buffaloConfigBean" class="net.buffalo.service.BuffaloServiceConfigurer">
		<property name="services">
			<map>
				<entry key="houseChargeService"><ref bean="houseChargeService"/></entry>
				<!-- oterh entries... -->
			</map>
		</property>
	</bean>
</beans>


dwr.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://getahead.ltd.uk/dwr/dwr20.dtd">
<dwr>
	<allow>
		<create creator="spring" javascript="houseChargeService" scope="script">
            		<param name="beanName" value="houseChargeService"/>
            		<!--
			<include method="getAllBankAccount"/>
			-->
	        </create>
	  	<convert match="com.ark.common.domain.ExtGridResult" converter="hibernate3"/>
	  	<convert match="com.ark.housecharge.domain.IncomeDaily" converter="hibernate3"/>
	  	<convert match="com.ark.housecharge.domain.IncomeItem" converter="hibernate3"/>
	  	<convert match="com.ark.housecharge.domain.IncomeItem" converter="hibernate3"/>
	  	<convert match="com.ark.housecharge.domain.FamilyMember" converter="hibernate3"/>
	  	<convert match="com.ark.housecharge.domain.BankAccount" converter="hibernate3"/>
	</allow>
</dwr>

web.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app
      PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
      "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
	<display-name>House Charge Application</display-name>

	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>
			classpath:/com/ark/housecharge/application_context.xml
			classpath:/com/ark/housecharge/applicationContext-acegi-security.xml
			classpath:/com/ark/housecharge/applicationContext-acegi-service.xml
		</param-value>
	</context-param>
    
	<filter>
		<filter-name>opensession</filter-name>
		<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
	</filter>
	
	<filter>
		<filter-name>acegi</filter-name>
		<filter-class>org.acegisecurity.util.FilterToBeanProxy</filter-class>
		<init-param>
			<param-name>targetClass</param-name>
			<param-value>org.acegisecurity.util.FilterChainProxy</param-value>
		</init-param>
	</filter>

	<filter-mapping>
		<filter-name>opensession</filter-name>
		<url-pattern>/bfapp/*</url-pattern>
	</filter-mapping>

	<filter-mapping>
		<filter-name>opensession</filter-name>
		<url-pattern>/dwr/*</url-pattern>
	</filter-mapping>

	<filter-mapping>
		<filter-name>acegi</filter-name>
		<url-pattern>*</url-pattern>
	</filter-mapping>  
	
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>

	<listener>
		<listener-class>org.acegisecurity.ui.session.HttpSessionEventPublisher</listener-class>
	</listener> 

	<servlet>
		<servlet-name>bfapp</servlet-name>
		<servlet-class>net.buffalo.web.servlet.ApplicationServlet</servlet-class>
	</servlet>

	<servlet>
		<servlet-name>dwr-invoker</servlet-name>
		<display-name>DWR Servlet</display-name>
		<servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
			<init-param>
				<param-name>debug</param-name>
				<param-value>true</param-value>
			</init-param>
	</servlet>
	
	<servlet-mapping>
		<servlet-name>bfapp</servlet-name>
		<url-pattern>/bfapp/*</url-pattern>
	</servlet-mapping>

	<servlet-mapping>
		<servlet-name>dwr-invoker</servlet-name>
		<url-pattern>/dwr/*</url-pattern>
	</servlet-mapping>
  
 	<welcome-file-list>
		<welcome-file>index.html</welcome-file>
	</welcome-file-list>

	<taglib>
		<taglib-uri>authz</taglib-uri>
		<taglib-location>http://acegisecurity.org/authz</taglib-location>
	</taglib>
</web-app>



0 请登录后投票
   发表时间:2007-11-20  
第一感觉:结构非常清晰
0 请登录后投票
   发表时间: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没出来..可以发全一点吗?
0 请登录后投票
   发表时间: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
0 请登录后投票
   发表时间:2007-12-04  
fa个war包上来 你发的项目 ant脚本是错的
0 请登录后投票
   发表时间:2007-12-14  
看晕了,一下子用的东西太多了吧,麻烦把项目重新整理了一下,可能我是初学者,弄了半天没有运行起来
0 请登录后投票
   发表时间:2007-12-14  
在IE6下有脚本错误,菜单无法显示.错误信息是: 'bandAccountWindow'未定义.

在Firefox下可以.
0 请登录后投票
   发表时间:2007-12-16  
楼主..有空可以讲一下那个dwrproxy吗?
我怎么不能读出数据..那些字段要和那里对映啊?和mapping
那对映?
如果有空..就你的例子说一下好吗?
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics