- 浏览: 2112310 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
sunzeshan:
找了很久,用了这个插件解决问题啦。谢谢
eclipse jetty debug source not found -
xiaosong0112:
您好,请问为什么要这样设置呢,原理是什么?在网上很多转帖都没有 ...
maven的jetty插件提示No Transaction manager found导致启动慢的解决方法 -
eimhee:
tjzx 写道畅搜谷歌:http://dian168.cc/打 ...
Google 镜像站搜集 -
tjzx:
畅搜谷歌:http://dian168.cc/打开的是“最火源 ...
Google 镜像站搜集 -
eimhee:
finallygo 写道你这属于"头痛医头脚痛医脚& ...
解决linux下too many file问题
使用extjs配合struts的MVC架构是目前流行的做法,两者的整合相当简单,只需扩展Action,直接向HttpServletResponse里写xml和json格式的内容,不再需要forward到struts指定的页面。
上面的java代码片端实现了一个通用的Action扩展,姑且称之为EXTJSAction,向HttpServletResponse写入xml内容,包括(但不限于)处理结果的xml格式内容和总的记录个数(用于翻页时显示总记录个数),以及成功或失败的标记,就这么简单!
接下来要求extjs能够识别并处理EXTJSAction返回的xml内容,通常在一个Ext.form.Form里实现,请看下面的代码片段:
首先定义了一个Form,这个Form有一个XmlErrorReader,能够读取EXTJSAaction返回的xml格式,判断EXTJSAaction处理是成功还是失败。Form被提交到../addSalesOrder.do,这是我们熟悉的struts格式,将调用到EXTJSAction,此即是extjs和struts交互的关键!
我们还注意到上面的js代码中,Form包含一个ComBoBox,用于从下拉列表中选择客户,这个ComBoBox是分页的(pageSize:20,会自动在ComBoBox展开后下放加翻页工具栏)。客户列表的内容同样来之于EXTJSAction,即../getCustList.do,这就是一个通用的EXTJSAction的好处,随处可使用!
请仔细体会上面的代码,extjs和struts的整合是如此的简单!
另外,Form在提交时,将Grid的内容组装成一个json格式的字符串,是为了方便成批提交Grid中的记录,那么在服务器端如何处理这个json串中的多条记录呢?需要用到json的java类库(http://www.json.org/java/),代码如下:
上面的java代码片段依此处理json串的多条记录,构造sql语句,将记录添加到数据库中,以json的方式处理成批提交的记录,应该是最方便的方法。
// 取查询结果xml和总记录个数 String xml = resultBuffer.getStringValue( CoreConsts.LIST_DATA_XML, 0 ); String records = resultBuffer.getStringValue( CoreConsts.TOTAL_COUNT, 0 ); // 替换xml中的记录个数 xml = replaceRecords( xml, records ); if ( records.equals( "0" ) ) xml = "<response success='false'>" + xml + "</response>"; else xml = "<response success='true'>" + xml + "</response>"; response.setContentType("application/xml;charset=UTF-8"); PrintWriter out = null; try { out = response.getWriter(); } catch ( IOException e ) { e.printStackTrace(); } out.write( xml );
上面的java代码片端实现了一个通用的Action扩展,姑且称之为EXTJSAction,向HttpServletResponse写入xml内容,包括(但不限于)处理结果的xml格式内容和总的记录个数(用于翻页时显示总记录个数),以及成功或失败的标记,就这么简单!
接下来要求extjs能够识别并处理EXTJSAction返回的xml内容,通常在一个Ext.form.Form里实现,请看下面的代码片段:
var fs = new Ext.form.Form({ labelAlign: 'right', labelWidth: 75, buttonAlign: 'left', // reusable eror reader class defined at the end of this file errorReader: new Ext.form.XmlErrorReader() }); fs.fieldset( {legend:'基本信息'} ); dsCust = new Ext.data.Store({ proxy: new Ext.data.HttpProxy({url: '../getCustList.do'}), reader: new Ext.data.XmlReader({ // records will have a "customer" tag //root: 'response', record: 'table', totalRecords: 'records' },[ 'CUSTID', 'CUSTSHORTNAME']) }); comboboxCust = new Ext.form.ComboBox({ fieldLabel:'客户', typeAhead: true, triggerAction: 'all', store: dsCust, displayField:'CUSTSHORTNAME', valueField: 'CUSTID', width:200, forceSelection:true, name:'clientid', hiddenName:'clientid', emptyText:'选择一个客户...', allowBlank:false, blankText:'请选择一个客户', pageSize: 20 }); fs.column({width:300}, comboboxCust ); fs.addButton('保存并新增', function(){ //组装grid的json /* var jsonData = ""; for( i=0; i < ds.getCount(); i ++ ) { var rec = ds.getAt( i ); if ( rec.data.newRecord || rec.dirty ) { jsonData += Ext.util.JSON.encode( rec.data ) + ","; } } jsonData = jsonData.substring( 0, jsonData.length - 1 ); //alert( jsonData ) //console.info(jsonData); */ var m = ds.modified.slice( 0 ); var jsonData = "["; for ( var i = 0, len = m.length; i < len; i++ ) { //alert(m[i].data["user_name"]); var ss = Ext.util.JSON.encode( m[i].data ); //alert(ss); if ( i==0 ) jsonData = jsonData + ss; else jsonData = jsonData + "," + ss; } jsonData = jsonData + "]"; //alert(jsonData); fs.submit( { url: "../addSaleOrder.do", params:{json:jsonData}, waitMsg:'正在处理,请稍候...', success:function(form, action ) { Ext.MessageBox.alert("销售订单!", "保存销售订单成功!"); fs.reset(); ds.modified = [];//将修改过的记录置为空,如果不清空,则修改过的数据会一直保留 ds.removeAll(); //从grid中移去 }, failure:function( form, action ) { Ext.MessageBox.alert("销售订单!", "保存销售订单失败!"); } }); } ); // A reusable error reader class for XML forms Ext.form.XmlErrorReader = function(){ Ext.form.XmlErrorReader.superclass.constructor.call(this, { record : 'field', success: '@success' }, [ 'id', 'msg' ] ); }; Ext.extend(Ext.form.XmlErrorReader, Ext.data.XmlReader);
首先定义了一个Form,这个Form有一个XmlErrorReader,能够读取EXTJSAaction返回的xml格式,判断EXTJSAaction处理是成功还是失败。Form被提交到../addSalesOrder.do,这是我们熟悉的struts格式,将调用到EXTJSAction,此即是extjs和struts交互的关键!
我们还注意到上面的js代码中,Form包含一个ComBoBox,用于从下拉列表中选择客户,这个ComBoBox是分页的(pageSize:20,会自动在ComBoBox展开后下放加翻页工具栏)。客户列表的内容同样来之于EXTJSAction,即../getCustList.do,这就是一个通用的EXTJSAction的好处,随处可使用!
请仔细体会上面的代码,extjs和struts的整合是如此的简单!
另外,Form在提交时,将Grid的内容组装成一个json格式的字符串,是为了方便成批提交Grid中的记录,那么在服务器端如何处理这个json串中的多条记录呢?需要用到json的java类库(http://www.json.org/java/),代码如下:
//保存订单明细 String json = this.getVariableSpace().getStringValue( "json", 0 ); json = RequestUtil.iso2utf( json ); if ( json != null || json.trim().length() > 0 ) { JSONArray jsonArr = null; try { XmlDBService xdbs = XmlDBServiceManager.getXmlDBService( Const.XMLDBSERVICE ); jsonArr = new JSONArray( json ); for ( int i = 0; i < jsonArr.length(); i++ ) { String pmgg = jsonArr.getJSONObject( i ).getString( "PMGG" ); String unit = jsonArr.getJSONObject( i ).getString( "UNIT" ); String amount = jsonArr.getJSONObject( i ).getString( "AMOUNT" ); String price = jsonArr.getJSONObject( i ).getString( "PRICE" ); //String money = jsonArr.getJSONObject( i ).getString( "MONEY" ); String availDate = jsonArr.getJSONObject( i ).getString( "availDate" ); String sql = "insert into sorderdetail ( sorderid, itemno, goodsid, unitid, quantity, unitprice, validdate ) select " + sorderid + ", " + ( i + 1 ) + ", '" + pmgg + "', ( select unitid from goodsunit where goodsid = " //取单位序号 + pmgg + " and unitname = '" + unit + "' )," + amount + ", " + price + ", '" + availDate + "'"; xdbs.executeDAC( sql ); } } catch ( Exception e ) { e.printStackTrace(); //加处理失败标记 this.outputBuffer.get( CoreConsts.TOTAL_COUNT, 0 ).setValueWithString( "0" ); } }
上面的java代码片段依此处理json串的多条记录,构造sql语句,将记录添加到数据库中,以json的方式处理成批提交的记录,应该是最方便的方法。
发表评论
-
jquery dual list 插件
2010-12-21 17:24 2353In my work, I came across the n ... -
Start PageIndexHistoryLast Change
2010-12-15 00:22 1006The specifications should provi ... -
ajax upload
2010-11-19 13:22 0ajax upload The following cri ... -
兼容IE和FF获取Referer的JS方法
2010-11-11 10:11 4462众所周知,我们web开发人员痛恨IE浏览器,因为IE不支持标准 ... -
jQuery优化
2010-09-16 08:30 5480之前,我们减少字节数和请求次数以及加载顺序以使页面加载的更快。 ... -
jQuery add table row
2010-08-23 13:39 0The approach you suggest is not ... -
Add and Remove items with jQuery
2010-08-23 13:25 0Add and Remove items with jQuer ... -
extra 1px space in dialog handle style - Ext JS
2009-04-20 23:33 1560Im developing a new style and h ... -
Grid - Custom header renderer? - Ext JS
2009-04-20 23:33 2051Is it possible to create a cust ... -
Inputs to DatePicker - Ext JS
2009-04-20 23:33 2147I thought I had read that you c ... -
dateFormat with timezone - Ext JS
2009-04-20 23:33 3574If I create JSON data on server ... -
How to use Ext.each? - Ext JS
2009-04-20 23:33 4464I'm trying to use Ext.each. It ... -
afteredit event ... new value? - Ext JS
2009-04-20 23:33 1498the new value is not set before ... -
problem qith iframe's - Ext JS
2009-04-20 23:33 1121I want to have dialogs and wher ... -
[Grid] Ext.data documenation - Ext JS
2009-04-20 23:33 1453I'm porting my grids to use the ... -
Last column to auto-adjust - Ext JS
2009-04-20 23:33 2687I can't see that this is curren ... -
Tree non-async creation "bug" - Ext JS
2009-04-20 23:32 2380When building a tree without us ... -
Bug - reload method of AsyncTreeNode - Ext JS
2009-04-20 23:32 1994Happens when the tree config o ... -
Minor grid paging toolbar issues - Ext JS
2009-04-20 23:32 1503When a grid toolbar is displaye ... -
Grid context menu - Ext JS
2009-04-20 23:32 2061I've made a grid with a context ...
相关推荐
一个运用Extjs,Struts2, json,iterator技术构建的iterator_jsonDemo2。iterator_jsonDemo1的链接:http://download.csdn.net/detail/cafebar123/8816409 运用了Extjs,Struts2, json,iterator技术, 将数据从...
ExtJs + Struts2 + JSON 程序总结
NULL 博文链接:https://wanglu271991027.iteye.com/blog/1539242
struts2+extjs+json整合实例
extjs与struts的整合代码,一个Ext与struts整合的代码,包括传统的实现方式,对比学习,很快就能了解其优势
Extjs Tree + JSON + Struts2 例子
EXTJS json struts2制作登陆窗口
讲述 extjs 整合 struts hibernate sping 和extjs怎么和Highchart整合
简单的Extjs+Struts整合的图书管理系统,实现图书的新增、修改、删除
struts2 json extjs 完整实例 struts2 json extjs 完整实例 完整可用 无错! struts2 json extjs 完整实例 struts2 json extjs 完整实例 完整可用 无错! struts2 json extjs 完整实例 struts2 json extjs 完整...
Extjs Tree + JSON + Struts2 开发war包
extjs tree + json+struts2示例源代码extjs tree + json+struts2示例源代码
网上有些这样的例子,但是下了几个都没有跑起来,哎,希望那些发文章的人要发就发全的,别发个半生不熟的。... 现在自己整理了一个Struts2+ExtJS2实现文异步文件上传,没法上传图片无法看到效果,直接上源码吧。
使用ExtJs获取后台json格式的数据必须的七个jar包,commons-beanuti-1s-1.7.0.jar,commons-collections-3.1.jar,commons-lang-2.5.jar,commons-logging-1.0.4.jar,ezmorph-1.0.4.jar,json-lib-2.1.jar,...
extjs_struts2_整合
ExtJS+struts2+json登陆实例--源码,适合初学者
ExtJS与Struts2的整合工程实例,能成功部署的MyEclipse工程,还配有相应的文档。
extjs+struts2+hibernate+json登录程序,主要讲解struts2配置JSON与前台extjs通信,异步数据交换,很强大
本Demo采用Struts2.1.8+Spring2.5.6(Annotation注解)+Hiberante3.3.2(Annotation注解)+ExtJS(Struts2-json)
@@@extjs+struts2+json plugin的例子