`
simplehumn
  • 浏览: 186574 次
  • 性别: Icon_minigender_1
  • 来自: 石家庄
社区版块
存档分类
最新评论

Ext与后台(一)

    博客分类:
  • EXT
阅读更多
[size=small]一段闲话:
最近做的项目用到了ExtJs,就像每个刚接触Ext的朋友一样,迷茫、无助。
Ext很多资料都是讲解Ext的界面怎么画,很少有人提及到跟后台的交互,以至于一个小小的功能在网上找好长时间,而且还要测试很久才好用。经过一个多月的使用,以及网上一些朋友的文章中的提示,总算是会用了一点。在这里,我认为大家对Ext具备了一定基础,并把自己的一些Ext的用法给大家分享一下,希望对大家能起到抛砖引玉的作用,如果大家发现错误,希望批评指正,共同提高!(附件是我们项目的一个截图)
转载请注明出处:http://simplehumn.iteye.com/blog/484513
言归正传:
我用的Ext版本是Ext2.21,说到这里顺便提一下,Ext2.2的iframe有bug,关于Ext性能不再多说,由于我们系统是要求跟另一个项目(工作流)集成,所以框架选择的是struts1+Spring2.5+hibernate3.2+Ext2.21。
1.列表Ext.grid.GridPanel显示
关于列表,开始我单纯而善良地认为Ext能自动分页,把json串传给grid就行了,但是我使用的过程中才发现,我的想法不支持Ext。。。哦,好像说反了
说下我的列表实现:
前台:
var sm = new Ext.grid.CheckboxSelectionModel();
var cm = new Ext.grid.ColumnModel([
	new Ext.grid.RowNumberer(),
	sm, 
	{header:'订货会编码',width:120,dataIndex:'dhhCommonId'},
	{header:'订货会名称',width:200,dataIndex:'dhhName'},
	{header:'供货月',width:120,dataIndex:'supplymonth'},
	{header:'供货段',width:120,dataIndex:'supplysection'},
	{header:'供货日',width:120,dataIndex:'supplydate'},
	{header:'创建时间',width:180,dataIndex:'createdate'},
	{header:'创建人',width:120,dataIndex:'createuser'}
]);
// 默认情况下列是可排序的
cm.defaultSortable = true;
var store = new Ext.data.JsonStore({
	url:'../../om/supplySection.do?method=findPageSupplySection',
	totalProperty:'totalProperty',
	root:'root',
	fields:[
		{name: 'ssJavaid'},
		{name: 'dhhCommonId'},
		{name: 'dhhName'},
		{name: 'supplymonth'},
		{name: 'supplysection'},
		{name: 'supplydate'},
		{name: 'createdate'},
		{name: 'createuser'}
	]
});
var orderColumnGrid = new Ext.grid.GridPanel({
	height:370,
	bodyStyle:'width:100%;',//宽度用了样式的写法
	stripeRows:true,//隔行换色
	loadMask: {msg:'正在加载数据,请稍侯……'},	
	store:store,
	cm: cm,	
	sm:sm,		
	bbar: new Ext.PagingToolbar({
		plugins:new Ext.ux.Andrie.pPageSize(),	//列表显示多少行
		pageSize:10,
		store: store,
		displayInfo: true,
		displayMsg: '显示第 {0} 条到 {1} 条记录,一共 {2} 条',
		emptyMsg: "没有记录"
	})

});
store.load({params:{start:0,limit:10}});

其中,store是从后台获得json串的,在列表的最后要加上store.load({params:{start:0,limit:10}});触发store调URL获得json串数据,当然store的写法很多这个不多说。
json串格式:
:{totalProperty:100,root:[{id:0,name:’name0’,descon:’descon0’},{id:1,name:’name1’,descon:’descon1’},{id:2,name:’name2’,descon:’descon2’}]
}

“totalProperty”是列表总条数,跟store的totalProperty:'totalProperty'单引号的那个名字一样就行了,又如:store里totalProperty:'total'单引号里的名字改为'total',则json串为"]:{total:100,。。。,root同理。
plugins:
grid的bba多了一个rplugins:new Ext.ux.Andrie.pPageSize(), //列表显示多少行
这是一个下拉框,功能是“每页显示多少行”且支持分页,是我从网上DOWN的资源。使用: 引用<script type="text/javascript" src="../../resources/js/pPageSize.js"></script>(路径自己改),然后在bbar里加上就行了,附件在最后附上
后台:
关于分页的后台代码不多说,说一下分页需要的参数,向后台传入的参数为:start、limit,分别表示从第start条开始,查询limit条数据,当点击下一页的时候start会随之变化。
返回时的代码:
response.setContentType("text/json;charset=utf-8");
response.getWriter().write(str);

其中str是你拼好的json串,格式在上面已经提到了。
2.列表Ext.grid.GridPanel增删查改
2.1增加
定义
var tbars = ['->',// 右对齐
		'-', {
			text : '<img src="../../resources/images/img/add.gif"/>新增',
			tooltip : '新增订货分段记录',
			handler : addOrderColumn
		}, '-'];

在GridPanel里加入一行tbar:tbars,
这样在列表的表头上面就会出现一个“新增”按钮,新增调用一个funciont函数,所有funciont中用到的组件都写在方法里,打开和关闭时利于创建、销毁,
代码:
var addOrderColumn = function() {
	// 弹出窗口的按钮集合
	var orderColumnButtons = [{
		xtype : 'submit',
		text : '保存',
		handler : function() {
			if(orderColumnForm.getForm().isValid()){
				//新增时判断供货段截止月不小于开始月
				if(Ext.get('ssStartDate').getValue() > Ext.get('ssEndDate').getValue()){
					Ext.MessageBox.alert("友情提示", "[供货段开始月]应小于等于[供货段截止月]!"); 
					return false;
				}			
				orderColumnForm.getForm().submit({ 
					url:'../../om/supplySection.do', 
					params:{method:'saveSupplySection'}, 
					method:'post',
					waitMsg:'正在保存,请稍等...', 
					success:function(form,action){
						orderColumnWindow.destroy();
						Ext.Msg.alert("友情提示","保存目标成功!",
							function(){
								store.reload();
							},this
						);
					}, 
					failure:function(form,action){ 
						Ext.MessageBox.alert("友情提示", "服务器出现错误请稍后再试!");
					} 
				}); 
			}
		}
	}, {
		text : '取消',
		handler : function() {
			orderColumnWindow.destroy();
		}
	}];
	
			
	var dhhStore =  new Ext.data.Store({
		proxy : new Ext.data.HttpProxy({
			url:'../../om/oM.do?method=findAllOMs'
		}), 
		reader : new Ext.data.JsonReader({
		root : 'root'		
		},[
			{name : 'javaid',mapping : 'javaid'},
			{name : 'omName',mapping : 'omName'}
		])
	});
	// 订货会名称
	var dhhmc = new Ext.form.ComboBox({
		fieldLabel : '订货会',
		hiddenName:'javaid',
		autoDestroy : true,
		store : dhhStore,
		valueField : 'javaid',
		displayField : 'omName',
		typeAhead : true,
		mode : 'local',
		triggerAction : 'all',
		emptyText : '请选择订货会',
		selectOnFocus : true,
		forceSelection:true,
		editable : true,
		width : widthValue
	});
	dhhStore.load();
	// 订货会组表单
	var orderColumnForm = new Ext.FormPanel({
		// title: '经销商开户申请及提交',
		bodyStyle : 'padding:5px',
		frame : true,
		layoutOnTabChange : true,
		autoHeight : true,
		autoWidth : true,
		labelWidth : 150,
		labelAlign : 'right',
		items : [dhhmc,{
			xtype : 'datefield',
			fieldLabel : '供货段开始月',
			name : 'ssStartDate',
			emptyText : 'YYYY-MM',
			format: 'Y-m', 
			allowBlank:false,
			width : 150
		},{
			xtype : 'datefield',
			fieldLabel : '供货段结束月',
			emptyText : 'YYYY-MM',
			format: 'Y-m', 
			name : 'ssEndDate',
			allowBlank:false,
			width : 150
		}],
		buttons : orderColumnButtons
	});
	// 创建表单结束

	// 将表单放到一个窗口中,并显示
	var orderColumnWindow = new Ext.Window({
		title : "订货会组信息表单",
		width : 400,
		height : 200,
		autoScroll : true,
		collapsible : true,
		maximizable : true,
		layout : 'fit',
		// plain:true,
		// bodyStyle:'padding:5px;',
		modal : true,
		items : orderColumnForm
	});

	orderColumnWindow.show();
	return orderColumnForm;
};


如果新增的时候想要初始化一些数据的话
在“新增”按钮加上类似这样一段代码
handler : function() {
	var dhhId = selectDhhForm.form.findField('javaid').getValue();
	var hqForm = addOrderColumn ();
	hqForm.load({
		url : '../../om/dhhDate.do?method=initDhhDate&dhhId='+ dhhId,
		waitMsg : '正在载入数据,请稍等...',
		method:"get",
		success:function(form,action){},
		failuer : function(){
			 Ext.Msg.alert('友情提示', '数据加载失败请重试!');
		}
	});
}

即打开addOrderColumn 窗口时,给窗口里的字段赋值
增加时在后台用FormBean直接取值(哎,struts1),然后该保存就保存该变动就动动,值得一提的是,后台要返回成功或失败的json信息,前台接到成功的信息后销毁窗口orderColumnWindow.destroy();,然后刷新列表的数据store.reload();(参考保存按钮代码),界面不刷新不跳转很人性化。
2.2删除
在bbars里再加一个按钮
var tbars = ['->',// 右对齐
'-',
{
text : '<img src="../../resources/images/img/add.gif"/>新增',
tooltip : '新增订货分段记录',
handler : addOrderColumn
}, '-',{
text:'<img src="../../resources/images/img/delete.gif"/>删除',
tooltip : '删除订货分段记录',
handler : deleteSS
},'-'];
删除比增加相比要简单的多,在grid的store里有一个'ssJavaid',这个是显示列表时JSON串传进来的,虽然不在界面显示,但是每条记录已经有这个ID了,“修改”时会具体说到这点,删除时根据这个ID去后台删就行了。
var deleteSS = function(){	
	var record = sm.getSelected();
	if(record&&sm.getCount()==1){
		Ext.MessageBox.confirm('提示信息', '您确定要删除所选的记录吗?', function(buttonobj){
		if(buttonobj=='yes'){
			var myCon = new Ext.data.Connection();
			waitMsg:'正在删除数据,请稍等...';
			myCon.request({
		       url:'../../om/supplySection.do?method=deleteSupplySection&ssId=' + record.get('ssJavaid'),
		       method:'post',
		       waitMsg:'正在删除,请稍等...', 
		       successProperty:'success',
		       success:function(transport){
					Ext.Msg.alert("友情提示","成功删除数据!",
						function(){
							store.reload();
						},this
					);
				}, 
				failure:function(form,action){ 
					Ext.MessageBox.alert("友情提示", "服务器出现错误请稍后再试!");
				} 
		      },this);
			}
		});
	}else{
		Ext.Msg.alert('友情提示','您必须选择一行数据以便进行办理!');
	}
	
};

关于批量删除,网上有一些例子,这里不多说。[/size]
  • 大小: 181.3 KB
3
0
分享到:
评论
1 楼 zhangvb521 2013-01-30  

相关推荐

    ext 前后台数据交互

    其中,Ext.data.Connection组件是Ext提供的一种异步调用后台服务的方式,在前台和后台之间实现数据交互。下面我们将详细介绍Ext前后台数据交互的原理和实现方式。 一、Ext.data.Connection组件 Ext.data....

    ext.net后台管理

    EXT.NET后台管理是一种基于Web的高效、功能丰富的前端开发框架,专为构建强大的后台管理系统而设计。EXT.NET结合了EXT JS的用户界面组件和.NET框架的强大力量,特别是C#编程语言,提供了丰富的交互式控件和组件,...

    ext前后台交互实例

    在"ext前后台交互实例"中,JSON扮演着至关重要的角色,作为数据载体,在前端展示层与后端逻辑层之间架起了一座桥梁。 ### JSP页面与JSON的交互 JSP(JavaServer Pages)是一种用于生成动态网页的技术,它允许将...

    ext后台管理

    "EXT后台管理"是一个基于ExtJS前端框架,结合PHP后端语言和MySQL数据库构建的小型应用程序系统。这个系统主要用于提供后台的管理和操作界面,帮助用户高效地管理数据和执行各种业务逻辑。 首先,我们来详细了解一下...

    Ext与后台服务器的交互操作

    ### Ext与后台服务器的交互操作 #### 一、概述 在现代Web开发中,前端框架如Ext JS(简称EXT)扮演着重要的角色,特别是在企业级应用中。Ext JS以其丰富的UI组件库、强大的数据处理能力和良好的用户体验而受到...

    Ext后台模板

    Ext后台模板是一款基于Ext JS框架开发的管理界面模板,它以简洁、清晰的布局和设计为特点,旨在提供高效、易用的后台操作系统。Ext JS是一个强大的JavaScript库,专用于构建富客户端应用,尤其适用于创建数据密集型...

    ext后台模板

    6. **API接口集成**:EXT后台模板通常需要与后端服务器进行交互,实现数据的获取和提交。EXTJS 提供了AJAX和Store组件来处理与服务器的JSON或XML数据交换,这需要开发者理解RESTful API的设计和使用。 7. **主题和...

    几种Ext后台模板和网站后台模板

    总的来说,这个压缩包文件提供了一组使用Ext JS和其他前端技术创建的后台界面模板,涵盖了多种设计风格和功能特性。对于想要学习或改进后台系统UI的开发者来说,这是一个宝贵的资源,可以帮助他们节省时间和提高开发...

    ext后台经典实例

    "EXT后台经典实例"指的是使用EXT与后端服务器进行交互的典型应用场景,通常涉及到Ajax通信、数据模型、Store和Grid等核心概念。 在EXT中,数据通常是通过Store来管理的。Store连接到后端服务器,负责加载、保存和...

    经典EXT后台简单布局

    EXT后台简单布局,很好的,好用!!!!

    EXTjavaScript 适合于做后台管理的界面的使用代码

    EXTJavaScript 是一种基于Web的前端开发框架,专为构建企业级后台管理界面而设计。它以其丰富的组件库、强大的数据网格、灵活的布局和高度可定制性而受到开发者们的青睐。EXTJavaScript 的核心是EXTJS,它是一个用纯...

    Ext与后台数据库交互

    ### Ext与后台数据库交互知识点详解 #### 一、Ext中常用的类 在Ext框架中,为了更好地处理数据和用户界面的交互,引入了一系列强大的类来简化开发过程。 ##### 1.1 Ext.data `Ext.data`是Ext框架的核心模块之一...

    一个基于EXT的ASP.NET后台管理框架例子源码程序

    一个基于EXT的ASP.NET后台管理框架例子源码程序

    Ext.net后台分页增删改

    Ext.NET是一款基于.NET Framework的JavaScript库,用于构建富交互式的Web应用程序。它扩展了Sencha Ext JS库,提供了与ASP.NET MVC和Web Forms框架的深度集成。在"Ext.NET后台分页增删改"这个主题中,我们将探讨如何...

    一款超炫的后台模版,Ext模拟Windows桌面

    【Ext模拟Windows桌面】是一款基于Java的Web应用后台模版,它利用了ExtJS库的强大功能,将传统的网页界面设计成类似Windows操作系统的工作环境。这个模版为用户提供了一种直观且熟悉的交互体验,使得在Web应用程序中...

    Ext简单后台布局

    Ext简单后台布局,分享给大家

    Ext表格获取后台数据

    ExtJS是一款基于JavaScript的RIA(Rich Internet Application,富互联网应用)框架,它提供了许多强大的功能和组件,其中之一就是表格组件Ext.grid.GridPanel。 Ext.grid.GridPanel是一个功能强大的表格控件,它...

    纯Ext搭建的后台管理模板

    纯Ext搭建的模板,网页右键不能查看源码。内含联系方式,可以联系我。

    Ext2.0 与后台数据的交互

    在EXT2.0框架下,前端与后台数据的交互是应用程序中的关键环节,尤其是在登录模块。EXT2.0是一款强大的JavaScript库,它提供了一整套的组件和工具,用于构建富客户端应用程序。在这个例子中,我们将深入探讨EXT2.0...

Global site tag (gtag.js) - Google Analytics