锁定老帖子 主题:我的ext范例
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-11-20
主程序参考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); } }); 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间: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); } }); } } |
|
返回顶楼 | |
发表时间: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> |
|
返回顶楼 | |
发表时间:2007-11-20
第一感觉:结构非常清晰
|
|
返回顶楼 | |
发表时间: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没出来..可以发全一点吗? |
|
返回顶楼 | |
发表时间: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 |
|
返回顶楼 | |
发表时间:2007-12-04
fa个war包上来 你发的项目 ant脚本是错的
|
|
返回顶楼 | |
发表时间:2007-12-14
看晕了,一下子用的东西太多了吧,麻烦把项目重新整理了一下,可能我是初学者,弄了半天没有运行起来
|
|
返回顶楼 | |
发表时间:2007-12-14
在IE6下有脚本错误,菜单无法显示.错误信息是: 'bandAccountWindow'未定义.
在Firefox下可以. |
|
返回顶楼 | |
发表时间:2007-12-16
楼主..有空可以讲一下那个dwrproxy吗?
我怎么不能读出数据..那些字段要和那里对映啊?和mapping 那对映? 如果有空..就你的例子说一下好吗? |
|
返回顶楼 | |