Extjs Dwr学习总结

合集下载

dwr学习总结

dwr学习总结

Dwr学习总结1.首先要导入dwr包。

2.配置web.xml文件,格式如下:其中是用来测试dwr用的,可有可无。

3.在WEB-INF下面建立一个dwr.xml文件。

实例如下:<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "/dwr/dwr20.dtd"><dwr><allow><!-- return String --><create creator="new" javascript="ud" scope="application"> <param name="class" value="ersDAO" /><include method="ifExist"></include></create><!-- return List --><create creator="new" javascript="pd" scope="application"> <param name="class" value="dao.ProductorDAO" /><include method="getAllProByTypeId"></include><include method="getOneProById"></include></create><convert converter="bean" match="bean.Productors"><param name="include" value="pid,proName,proCount" /></convert></allow></dwr>这里主要说下create的配置<create creator="new" javascript="ud" scope="application"><param name="class" value="ersDAO" /><include method="ifExist"></include></create>这是个最简单的配置,其中Creator:属性相当于创建的实例的方法,new 就相当于生成了一个实例对象,Javascript:这个是自定义的,用于在jsp页面中引用。

学习ExtJs笔记

学习ExtJs笔记

学习ExtJs笔记Grid表格1、添加数据的时候,将数据的属性设置为dirty。

因为在使用Ajax提交数据的时候,非dirty的数据不会自动保存到store的modifield属性中。

2、保存数据:(1)store.modifield.slice(start,end);作用:返回一个新数组,取得从start到end的所有元素,但不包括end元素。

如果参数只有一个0,则表示取得全部的数据;(2)each(m,function())(m为一个数组),该方法主要作用是遍历数组m中的每一条记录,并且每条记录都按照function()方法进行处理。

不可在function方法里面加上循环,否则,将出现多重结果。

(3)listeners监听器:listeners: {"afterEdit": {fn: afterEdit,scope: this} }作用:监听afterEdit。

当单元格编辑完成或者退出编辑状态,自动调用fn方法,作用的范围是当前页面。

(4)当添加数据成功后,新添加的数据有三角行的标识,要除掉标识,可用Record 的commit方法。

3、读取数据(1)从Txt文件中读取数据将读取的数据编码eval(response.responseText),否则将不能正确读取数据。

(2)设置记录的字段的值var initValue = {name:'',gender:'',age:''};var p = new Record(initValue);p.set('name',data_get[i].name);p.set('gender',data_get[i].gender);p.set('age',data_get[i].age);Tree 树1、Tree的加载使用方法render。

Tree.render()方法将tree加载到tree的‘el’中。

ExtJs学习笔记 经典版

ExtJs学习笔记   经典版

6.Ext.data.Store篇 (11)7.Ext.data.JsonReader篇一 (13)8.Ext.data.JsonReader篇二 (16)9.Ext.data.HttpProxy篇 (20)10.Ext.data.Connection篇一 (21)11.Ext.data.Connection篇二 (25)12.Ext.Updater篇一 (27)13.Ext.Updater篇二 (28)14.JSON序列化篇 (34)15.通信篇 (36)16.extJs 2.0学习笔记(Ajax篇) (39)17.extJs 2.0学习笔记(Ext.data序论篇) (40)18.extJs 2.0学习笔记(Ext.Panel终结篇) (41)19.extJs 2.0学习笔记(事件注册总结篇) (46)20.extJs 2.0学习笔记(Ext.Panel篇一) (49)21.extJs 2.0学习笔记(Ext.Panel篇二) (51)22.extJs 2.0学习笔记(Ext.Panel篇三) (60)23.extJs 2.0学习笔记(Ext.Panel篇四) (63)24.extJs 2.0学习笔记(组件总论篇) (67)25.extJs 2.0学习笔记(Ext.Element API总结) (70)26.extJs 2.0学习笔记(Element.js篇) (74)27.extJs 2.0学习笔记(DomHelper.js篇) (77)28.extJs 2.0学习笔记(ext.js篇) (78)1. ExtJs 结构树2. 对ExtJs的态度extjs的确是个好东西,但是,它的优点也就是它的缺点:∙加载页面慢∙时间一长,浏览器占内存就会疯长∙服务器端功能极度削弱,除了数据库操作外,几乎所有功能都到了客户端,还得用javascript来写。

∙功能全到了客户端,而客户端语言javascript的编写还是有许多的麻烦,真正精通它的人极少。

DWR学习小结(2)

DWR学习小结(2)

DWR学习小结(2)步行者2006-08-10 11:00:50DWR的小例子服务器端先提供两个类文件:一个是OptionBean它的内容是public class OptionBean {private String itemId;private String itemValue;public String getItemId() {return itemId;} public void setItemId(String itemId) {this.itemId = itemId;}public String getItemValue() {return itemValue;}public void setItemValue(String itemValue) this.itemValue = itemValue;}} 另外一个类文件TypeImpl,它的内容是public List getSubType(String superType) {// TODO Auto-generated method stubList list = new LinkedList();if (superType.equals("1")) {OptionBean option = new OptionBean();option.setItemId("aaaa");option.setItemValue("类别一");list.add(option);} else if (superType.equals("2")) {OptionBean option = new OptionBean();option.setItemId("bbbb");option.setItemValue("类别二");list.add(option);}return list;}首先要在dwr.xml中做如下的配置:L<!DOCTYPE dwr PUBLIC"-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN""/dwr/dwr10.dtd"><dwr><allow><create creator="new" javascript="JDate"><param name="class" value="java.util.Date" /></create><create creator="spring" javascript="JType"><param name="beanName" value="type" /><param name="location" value="dwr-beans.xml"/></create><convert converter="bean" match="com.dwr.OptionBean"/></allow></dwr>Dwr会自动生成如下的三个JS。

ExtJS学习笔记

ExtJS学习笔记

蹒跚学步第一步- 入门想必您已经听说过Ext、浏览了,并且尝试阅读。

不过,面对复杂的API文档,您却不知如何下手?!第二步- 起步通览过,并且找到了所要立刻尝试的功能,面对混杂的网页源代码,如何开始一个简单的测试页面?那么…… 不论您的目标是什么,您都可以依照本文快速的开始使用Ext。

不,不用搭建服务器,您所需要的仅仅是。

如果还没有安装,那么现在就是一个好机会。

第三步–配置工作环境Html 的格式设置<html><!-- 每份有效的HTML应符合标准,为此head标签不能少--><head><!-- 下面一行规定了本页面是UTF-8格式编码的。

--><!-- 应一句俗话:“用了UTF-8,走遍天下都不怕”,意思是说UTF是一种囊括了世界多种语言的编码标准,无论客户终端,各平台架构都可放心地使用。

这样,就要统一页面和数据交换的字符本身都是UTF-8的。

--><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><!-- Ext自带的样式表,由于脚本中须引用这些样式的定义,所以必须在声明语句的次序上,做到“样式优先”:放在script标签之前。

--><link rel="stylesheet" type="text/css" href="ext/resources/css/"><!-- 接着就是你准备好的CSS样式--><!-- 居最先位置的是适配器(adapter)脚本……--><script type="text/javascript" src="ext/adapter/ext/"></script><!-- ……然后Ext为本身,这足是供调试用debug的版--><script type="text/javascript" src="ext/"></script><!-- 以下是你项目用到脚本--><!-- 设置页面的标题(可不填)--><title id="page-title">Title</title><!-- 之所以引入以下script标签是为了说明在页面程序中的必要性。

extJs2.0学习笔记(ext.js篇)

extJs2.0学习笔记(ext.js篇)

extJs2.0学习笔记(ext.js篇) 要是以前,我铁定整天到处找教程看,光说不练,现在觉悟了,看教程看得最多,不一定能看完,看完了不一定能比作者更明白,看明白了不一定能用得好。

所以看教程其实好处不大,只能作为小小的参考。

很多东西看别人的始终是没有用。

只有将实验进行到底才是王道…… 这儿主要是代码分析。

研究工具:Dreamweave cs3(装那个extJs 2.0插件老装不上)、Aptana(一个好处,好看代码,有括号匹配,json语法好是好,就是括号多了,搞清在哪儿结束) 发现,extJs的代码最喜欢用json语法定义,类基本上都是用json语法定义的。

而不是在外面一大路的xx.prototype.yyyy=function(){……}。

不过这种语法蛮清晰。

我喜欢。

extJs时面只有一个类:Ext,它是一个静态类。

提供了经常要用到的函数。

Ext.apply = function(o, c, defaults){if(defaults){// no "this" reference for friendly out of scope callsExt.apply(o, defaults);}if(o && c && typeof c == 'object'){for(var p in c){o[p] = c[p];}}return o;}; 这是apply函数,作用其实相当于克隆,它把对象c中的成员全部复制到o中去。

如果有defaults,也把它的内容复制到o中。

这儿其实揭示javascript的一种语法: javascript中的对象的成员有两种引用方法: 一、o.propertyName 二、o[propertyName] 这段代码关键就在o[p]=c[p]。

这个要理解。

尽管如此,但是不能像下面一样做: var newelem=new Object(); Ext.apply(newelem,Ext.getDom("a1")); Ext.getDom("form1").appendChild(newelem); 下面一大段的代码,由于dw不好看代码,半天才晓得那儿是个(function(){……Ext.apply(Ext,{……}})(),这是我把概述出来。

js学习总结

js学习总结

js学习总结学习JavaScript是现代编程的必备技能之一。

在Web开发中,JavaScript是一种广泛应用的脚本语言,可以为网页赋予动态和交互性。

学习JavaScript对于想要成为全栈开发者或前端工程师的人来说是至关重要的。

在我的JavaScript学习过程中,我总结了以下几点经验。

首先,学习语法和基本概念是理解JavaScript的关键。

我首先学习了JavaScript的基础语法,包括变量、数据类型、运算符和控制结构等。

从简单的示例开始,逐渐深入理解语言的特性和用法。

在学习的过程中,我发现通过实践编写代码是最好的学习方法,因为只有亲自动手去实验,我才能更好地理解和记住。

其次,掌握DOM(Document Object Model)和事件处理非常重要。

DOM是HTML文档的编程接口,可以用JavaScript来操作网页上的元素。

我学习了如何通过DOM方法选择和操作HTML元素,例如修改文本内容、改变样式或添加和删除元素等。

同时,我还学习了如何通过事件处理来实现网页的交互性。

事件处理允许在用户执行某些操作时触发相应的JavaScript代码。

这使得网页能够对用户的操作做出响应,并提供更好的用户体验。

第三,熟悉常用的JavaScript库和框架能够提升开发效率。

像jQuery这样的库提供了许多实用的功能和方法,使得JavaScript代码变得更简洁和易读。

另外,像React和Vue.js这样的前端框架提供了更高级和更复杂的功能,使得我们能够更轻松地构建现代化和响应式的网页应用程序。

第四,学习调试和错误处理是成为一名优秀JavaScript开发者的关键。

在编程过程中,出错是常有的事情,而且调试是解决问题的关键工具。

我学会了如何使用浏览器的控制台来调试代码,查看变量的值、打印调试信息或检查JavaScript的错误。

此外,我还了解了常见的错误类型和如何处理它们。

对于解决问题,要有耐心和坚持不懈的精神。

ExtJs使用总结(非常详细)

ExtJs使用总结(非常详细)

ExtJs使用总结(非常详细)一、获取元素(Getting Elements)1.Ext.getvar el = Ext.get('myElementId');//获取元素,等同于document.getElementById('myElementId');//会缓存2. Ext.flyvar el = Ext.fly('myElementId')//不需要缓存。

注:享元模式(Flyweight Design Pattern)是一种节省内存的模式,该模式的大概原理是建立单个全体对象然后不断反复使用它。

3.Ext.getDomvar elDom = Ext.getDom('elId'); // 依据id来查dom节点var elDom1 = Ext.getDom(elDom); // 依据dom节点来查dom 节点二、CSS元素4.addClassExt.fly('elId').addClass('myCls'); // 加入元素的'myCls'的样式5.radioClassExt.fly('elId').radioClass('myCls');//添加一个或多个className 到这个元素,并移除其所有侧边(siblings)节点上的同名样式。

6.removeClassExt.fly('elId').removeClass('myCls'); // 移除元素的样式7.toggleClassExt.fly('elId').toggleClass('myCls'); // 加入样式Ext.fly('elId').toggleClass('myCls'); // 移除样式Ext.fly('elId').toggleClass('myCls'); // 再加入样式8.hasClassif (Ext.fly('elId').hasClass('myCls')) {//判断是否已加上这个样式// 是有样式的……}10.replaceClassExt.fly('elId').replaceClass('myClsA', 'myClsB');//替换样式11.getStylevar color = Ext.fly('elId').getStyle('color');//返回该元素的统一化当前样式和计算样式。

javascript总结及心得

javascript总结及心得

javascript总结及心得JavaScript是一种强大而灵活的编程语言,广泛应用于Web开发中。

它具有动态性、解释性和面向对象的特点,为开发者提供了丰富的工具和功能,使得网页的交互性和用户体验得到了极大的提升。

下面将就我在学习和应用JavaScript过程中的一些总结和心得进行分享。

一、JavaScript基础知识1. 变量和数据类型在JavaScript中,声明变量可以使用var、let或const关键字。

JavaScript的数据类型包括数字、字符串、布尔值、对象和数组等。

灵活的数据类型使得JavaScript适用于各种不同的应用场景。

2. 运算符和表达式JavaScript支持基本的算术运算符、比较运算符、逻辑运算符等。

同时,JavaScript还支持特殊的三元运算符和隐式类型转换,使得编写代码更加灵活和简洁。

3. 条件语句和循环结构通过if、else if、else语句可以根据不同的条件执行不同的代码块。

而for、while和do-while循环结构可以控制代码的重复执行,实现更高效的逻辑。

4. 函数和作用域函数是JavaScript中的重要概念,可以封装一段可重复使用的代码,并可以接收参数和返回值。

作用域有全局作用域和函数作用域之分,理解作用域可以更好地管理变量和函数的可见性和生命周期。

二、JavaScript高级特性1. 面向对象编程JavaScript是一门面向对象的语言,支持创建对象和定义类。

通过构造函数和原型链的方式,可以实现封装、继承和多态等面向对象的特性。

2. 异步编程JavaScript采用了单线程和事件驱动的模型,因此在处理一些耗时操作时,可以使用异步编程来避免阻塞页面的加载。

常用的异步编程方式包括回调函数、Promise和async/await等。

3. DOM操作JavaScript可以通过DOM(Document Object Model)来操作网页的结构和内容。

DWR学习笔记

DWR学习笔记

1 DWR 是什么DWR是一个可以允许你去创建AJAX WEB站点的JAVA开源库,它可以通过浏览器端的Javascript代码去调用服务器端的Java代码,看起来就像是Java代码运行在浏览器上一样。

DWR是一个完整的异步AJAX框架,它隐藏了XMLHttpRequest对象,程序员在开发过程中不需要接触XMLHttpRequest 对象就可以向服务器发送异步请求并通过回调方式处理服务器的返回值。

DWR包含两个主要部分:∙ 运行在服务器端的servlet控制器(DwrServlet),它负责接收请求,调用相应业务逻辑进行处理,向客户端返回响应。

∙ 运行在浏览器端的Javascript,它负责向服务器端发送请求,接收响应,动态更新页面。

DWR工作原理是通过动态把Java类生成为Javascript。

它的代码就像Ajax魔法一样,你感觉调用就像发生在浏览器端,但是实际上代码调用发生在服务器端,DWR负责数据的传递和转换。

这种从JavaScript到Java的远程调用功能的方式使DWR用起来有种非常像RMI或者SOAP的常规RPC机制,而且DWR的优点在于不需要任何的网页浏览器插件就能运行在网页上。

Java从根本上讲是同步机制,然而Ajax却是异步的。

所以你调用远程方法时,当数据已从网络上返回的时候,你要提供有回调(callback)来接收数据。

DWR动态在浏览器端生成一个AjaxService的JavaScript类,以匹配服务器端AjaxService的Java类。

由eventHandler去调用它,然后DWR处理所有的远程细节,包括转换所有的参数以及将返回的Java对象映射成Javascript 对象。

在示例中,先在eventHandler方法里调用AjaxService的getOptions() 方法,然后通过回调(callback)方法populateList(data) 得到返回的数据,其中data 就是String[]{"1", "2", "3"},最后再使用DWR utility 把data加入到下拉列表。

ext学习总结

ext学习总结

1.Ext前台显示页面设计文件结构:WebRoot:app ---common、controller、model、stroe、view、app.jsCss---.cssData----.jsonLib---local、override、resources、ext-all.jsWEB-INF ----conf(配置文件)、lib(jre包)、web.xmlIndex.jsp页面设计:Define相当于创建一个类,creat相当于在类的基础之上创建一个对象Pannel显示的实际页面Model与数据库相对应的一个实例模型Stroe与数据库进行数据通讯Controller页面显示逻辑控制实现Add(),方法在容器组件内添加控件2.前台与后台数据交互页面与后台数据通信的桥梁,是view页面显示中的name属性的值。

与后台定义的成员变量保持一致,否则传值不成功。

前台与后台通信有同步和异步2种方式有session jsonExt.getCmp('jxgrid').getStore().load({params:{id:id}});//传递参数进行store加载Ext.getCmp('processImgBrowser').getStore().getProxy().extraParams = {'lplan.pid': type}; //前台向后台传参,把前台的参数type传递到后台的lplan.pid,其中extraParams是前台后台参数传递的媒介桥梁,type先放在extraParams中在赋值给lplan.pid。

注意:getCamp()内参数id要与store在同一级:示例me.processPanel = Ext.create('Ext.panel.Panel', {id: 'processPanel',width: '100%',height: 120,autoScroll: true,items: [{id: 'processImgBrowser',xtype: 'imgbrowser',itemId: 'processImgBrowser',store: me.processstore,cls: 'img-chooser-view'}]});3.智能电厂学习总结1>、文件下载window.open('export_download.action?fileName=' + file, '_self'); 在当前窗口打开一个新的窗口如下window.open()的基本语法:window.open(pageURL,name,parameters)其中:pageURL 为子窗口路径name 为子窗口句柄parameters 为窗口参数(各参数用逗号分隔)示例:<SCRIPT><!--window.open('page.html','newwindow','height=100,width=400,top=0,left=0,toolbar=no,menubar=no,scrol lbars=no, resizable=no,location=no, status=no')//写成一行--></SCRIPT>2>、后台接受前台数据Ext.getCmp('zxtree').getStore().getProxy().extraParams = {'zxTask.type': dbtype}; //把前台数据dbtype通过桥梁extraparams赋值给后台zxTask.type后台使用get方法接受前台页面属性信息时,使用ISO8859-1格式传输,接收道德数据中文乱码,需要转码,转码方法如下:fname = new String(this.getFileName().getBytes("ISO8859-1"),"utf-8"); //把接收到的this.getFileName(),转码为utf-8并赋值给fname。

ExtJs学习笔记PPT教学课件

ExtJs学习笔记PPT教学课件
• <script type="text/javascript" src="Ext/adapter/ext/extbase.js"></script>
• <script type="text/javascript" src="Ext/ext-all.js"></script>
2020/12/10
2
最简单的例子
2020/12/10
15
Ext.Panel
• 遇到问题
一、显示的问题
我写了一行这样的代码,但是没有任何结果: var panel=new Ext.Panel({width:300,height:300,title:'标题栏 '});
2020/12/10
11
Ext.Panel
panel1=new Ext.Panel(config1); panel1.setPosition(0,0);
var resizer=new //Ext.Resizable(panel1.getEl(),{handlers:'all'}); //resizer.on('resize',function(){panel1.updateBox (panel1.getSize());}); } Ext.onReady(newPanel1); 显示结果如下:
2020/12/10
10
Ext.Panel
tbar:['请输入关键字:', {xtype:'textfield',width:80},'-', {text:'点一下

extjs(gis经验总结)

extjs(gis经验总结)

extjs(gis经验总结)(1)<package name="promotion-json" namespace="/" extends="json-default">如果这个package继承了json-default的时候。

如果在页面发送ajax请求的时候。

在action中如果有多个方法的时候。

会莫名其妙的发送了两个请求出来。

一个是正常的。

一个是空的。

会造成错误。

后来发现原因是这样的。

struts2 中JSON的原理是在ACTION中的get方法都会序列化,所以前面是get的方法只要没指定不序列化,都会执行。

也就是说。

如果方法名称是get开头的。

那么久会序列化然后被执行。

于是解决方法就是:1、Action中的业务方法前别加get 或者 set(属性的get set 除外)2、用@JSON(serialize=false)指定方法不序列化(2)如:传List<AdminRegionEntity> selectNodes参数的时候需要把参数转化为jsonData然后才能再提交var selectNodes = new Array();var nodes = adminRegionTree.getChecked();Ext.each(nodes, function(node) {// 默认节点被打开了var validFlag = "false";// 如果他不是叶子节点,他下面又没有子节点说明他没有打开if(!node.isLeaf()&&(node.childNodes==null||node.childNod es.length<=0)){validFlag = "true";// 表示没有打开}var fun = {'code' :node.raw.code,// 被选中节点的编码'regionlevel' : node.raw.regionlevel,// 被选中节点的级别'simpleName' : validFlag// 标识是否被展开};selectNodes.push(fun);});// 传递多个参数var array = {'deptId':testMassage[4],selectNodes:selectNodes};Ext.Ajax.request({url : 'saveAdminRegionWithDept.action',jsonData:array,// 把参数转化为jsonsuccess : function(response) {var json = Ext.decode(response.responseText);Ext.MessageBox.alert('提示:','保存成功');},failure : function(response) {var json = Ext.decode(response.responseText);Ext.MessageBox.alert('提示:','保存失败');}});}(3)mybstis中的批量操作,容易出现事务不可以用的情况,如果是小数据量的操作,建议尽量不要用批量操作(4)修改store的参数deliveryAddressStore.on('beforeload',function(store, operation, eOpts){Ext.apply(operation,{params : {"deptId":item.data.id}});});deliveryAddressStore.load({params: { start: 0, limit: 25 }});(5)修改store的url//修改store的url和paramsreceiveAddressStore.on('beforeload',function(store, operation, eOpts){Ext.apply(operation,{params : {"address":customerAddresses}});});receiveAddressStore.getProxy().url = 'getReceiveCustomerAddressByAddress.action';receiveAddressStore.load({params: { start: 0, limit: 25 }});(6)树的展开用expandpath(里面是从根到结尾的id通过'/'连接起来的路径)(7)比如删除和修改之后,马上刷新store 我们通常采用panel.store.load();(8)在做mybatis操作的时候所传入的参数应该和数据库的字段类型一致,不然就会出现"无效的列类型",还有就是插入的数据null也会出现这个情况.(9)数组的循环我们一般用以下方式Ext.Array.forEach(res,function(item){alert(item.get("XXX"))}(10)获取树上所有选中的节点:var array = adminRegionTree.getChecked();(11)在mybatis中如果想传递多个不相关的参数到数据库中去,就应该把他们组装成一个map然后再传一个map进去.(12)把一颗树收缩起来可以用treepanel.collapseAll();但记住要把root的visiable设置为false(13)表格读取本地数组store:用arraystore创建var regionStore = Ext.create('Ext.data.ArrayStore', {fields: [{name: 'fullName'}]});把需要记载的数据拼成二维数组Ext.each(nodes, function(node) {if(node.raw.regionlevel==4){var tempNode = new Array();tempNode.push(node.raw.fullName);//表格对应的是2维数组,所以转换。

DWR学习笔记(六)...

DWR学习笔记(六)...

DWR学习笔记(六)...DWR学习笔记(六)js 2010-01-02 19:25:09 阅读2 评论0 字号:大中小订阅七.engine.js的功能:engine.js对DWR非常重要,因为它是用来转换和动态生成javascript的接口供函数调用的js库文件,所以只要用到DWR的地方就需要导入它。

<script type="text/javascript" src="/[YOUR-WEB-APP]/dwr/engine.js"></script>**功能介绍:我们主要可以操作js对象DWREngine来操作一些API,可以设置一些DWR执行性能或着执行方式等。

主要针对DWR界面通过js调用java对象方法的时候可以使用DWREngine对象进行一些辅助的设置等!(1)批量调用:可以使用batch来批量的执行远程调用(即DWR界面通过js调用java对象)。

这样可以减少与服务器的交互次数,所以可以提交反应速度。

就是说一个批量执行不管内部调用了几个java方法都将只与服务器交互一次。

**原理规则:一个batch以DWREngine.beginBatch()开始,并以DWREngine.endBatch()结束。

当DWREngine.endBatch()被调用,就结束了该次远程调用,这样DWR就在一次与服务器的交互中执行batch中所有的调用。

**注意:DWR会小心的处理保证所有的回调函数都会被调用,所以你可以明显的打开和关闭批处理。

只要别忘了调用endBatch(),否则所有的远程调用将永远的处于列队中,不会得到返回,更不会调用回调函数。

例子:界面js调用java对象时的批量调用写法//批量调用开始DWREngine.beginBatch();Remote.methodInBatch1(params, callback1);Remote.methodInBatch2(params, callback2);//批量调用结束,结束endBatch()方法中可以传递一些参数,像超时和异常处理等DWREngine.endBatch(//超时时间3000毫秒,这属于局部超时属性的设置,//所以只在该batch中起作用,对batch之外的调用不起作用{ timeout:3000});**说明:batch中的两个调用将只进行一次请求,并且回调函数会正常被调用,这样就提高了效率!如果同一个batch中设置了多个相同的选项的值,例如除了endBatch()设置了超时,两个调用中也设置了超时选项,那么对于该batch中只有最后一个设置会起作用,之前的设置DWR将会忽略(2)顺序调用:因为Ajax一般是异步调用,所以远程调用不会按照发送的顺序返回。

DWR学习

DWR学习

DWR的使用经验:1.. 需要jdom.jar和bsf.jar,否则无法跟spring整合.2.. dwr生成的javascript函数会自动加一个回调函数的参数,如原来的函数是checkExist(String name),那么生成的javascript函数是checkExist(callbackFunc,String name).3.. 注意回调函数只能有一个参数,就是服务器的返回值,如function(messFromServer),这里messFromServer是该操作在服务器上的返回值.4.. util.js里面有很多有用的方法,最好熟悉一下.5.. convert并不是必须的,只有你的函数需要传递非基本数据类型的数据时需要此项.我需要增强的,dom操作,javascriptDWR collection converter 使用摘要<convert converter="collection" match="java.util.Collection"/>但是不知道怎么用,从 Java Object --> Javascript Object 问题不大,有现成的例子可供参考:),就是 Java function 返回一个Collection,看了一下返回值在 javascript 中是的形式是一个object Array然后在 javascript 取出每一个 Object的 property (eg. object.id , ....)下面是一个应用实例---------------------DWR.XML------------------------------<dwr><allow><convert converter="bean" match="dwr.sample.Apartment"/><create creator="new" javascript="ApartmentDAO"class="dwr.sample.ApartmentDAO"><include method="findApartments"/><include method="countApartments"/><include method="addApartment"/><include method="addApartments"/><include method="addApartments2"/></create><create creator="spring" javascript="ApartmentDAO" ></create></allow><signatures><![CDATA[import java.util.*;import dwr.sample.*;ApartmentDAO.addApartments(List<Apartment>);ApartmentDAO.addApartments2(Map<String,Apartment>);]]></signatures></dwr>如果传如 java 的代码的参数是一个 Collection ,则要稍微处理以下,先照上面黑体字的声明以下传入的Collection的内部包含的类的确切类型,以便 Java 代码作出判断;如果传入的参数是一个 List,则在 Javascript 中把这些对象放在一个Array中就可以了,如果传入的参数是一个Map,原来以为是一个二维的 Array就行了,但是试过之后发现不行,看了一下例子,原来要使用这种形式: var depts={ "dept1":new department("2", "200"),"dept2":new department("3", "300") };这样传进去之后 Java 就会根据这些数据构建一个Map,。

dwr学习

dwr学习

/dwr/这段时间较闲,研究了一番dwr.发现dwr实现的AJAX有些地方确实很是先进.比如动态生成javascript代码;隐藏的http协议;javascript于java代码交互的是javascript对象(或字符串)等.以下是我临时译的一些东西.本来想全译,发现dwr实在是简单,就随便写了.英文居差,现一把.1、DWR: Easy AJAX for JAVA作为一个java open source library,DWR可以帮助开发人员完成应用AJAX技术的web程序。

它可以让浏览器上的javascript方法调用运行在web服务器上java 方法。

DWR主要由两部门组成。

javascript与web服务器通信并更新web页;运行在web服务器的Servlet处理请求并把响应发回浏览器。

DWR采用新颖的方法实现了AJAX(本来也没有确切的定义),在java代码基础上动态的生成javascript代码。

web开发者可以直接调用这些javascript代码,然而真正的代码是运行在web服务器上的java code。

出与安全考虑,开发者必须配置哪些java class暴露给DWR.(dwr.xml)这种从(java到javascript)调用机制给用户一种感觉,好象常规的RPC机制,或RMI or SOAP.但是它运行在web上,不需要任何浏览器插件。

DWR不认为浏览器和web服务器之间协议重要,把系统界面放在首位。

最大挑战是java method call的同步特征与ajax异步特性之间的矛盾。

在异步模型里,结果只有在方法结束后才有效。

DWR解决了这个问题,把回调函数当成参数传给方法,处理完成后,自动调用回调方法。

这个图表显示了,通过javascript事件,DWR能改变select的内容,当然这些内容由java代码返回。

javascript函数Data.getOptions(populateList)由DWR动态生成,这个函数会调用java class Data类的方法。

DWR技术总结

DWR技术总结

DWR技术总结目录1DWR入门 (3)1.1DWR(Direct Web Remoting)概述 (3)1.2DWR使用入门 (3)2web.xml的配置 (7)3dwr.xml的配置 (8)3.1创建dwr.xml文件 (8)3.2<init>标签 (8)3.3<allow>标签 (8)3.3.1Creators构造器 (9)3.3.2Converters转换器 (10)3.3.3Filters过滤器 (11)3.4<signatures>标签 (12)4engine.js功能 (12)5util.js功能 (13)6DWR中的javascript (13)6.1DWR的远程调用——使用回调函数处理Ajax的异步特性 (13)6.2创建一个与Java对象相匹配的JavaScript对象 (14)1DWR入门1.1DWR(Direct Web Remoting)概述DWR是一种AJAX(Asynchronous JavaScript and XML)的JAVA实现,是一个能够使运行在服务器上java和运行在浏览器中的JavaScript交互,并能简单的相互调用的Java库。

官方网站:最新版本:3.0.rc2稳定版本:2.0.7DWR包括两个主要部分:*运行在服务器上的Java Servlet,用以处理请求和向浏览器发回响应。

*运行在浏览器上的JavaScript,用以发送请求,并可以动态的更新网页。

DWR的工作原理是动态生成基于Java类的JavaScript。

生成的代码具有ajax 功能,使效果看起来就好像在浏览器上执行的一样,实际上是,代码调用发生在服务器端,DWR负责数据的传递和转换。

这种从java到javascript的运程调用功能的方式使DWR用起来有种非常像RMI或者SOAP的常规RPC机制,而且DWR 的优点在于不需要任何的网页浏览器插件就能够运行在网页上。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Hibernate Spring注解应用Hibernate Spring使用注解方式配置bean时,不用在xml文件中配置bean以及注入属性之类。

1实体类注解@DataTransferObject //D W R注释,告知D W R此类可以自动整理,并作为A j a x响应的一部分发送@Entity //说明是hibernate实体类@Table(name = "company")//指定表名2 主键注解@Id //标识id@GeneratedValue(strategy = IDENTITY)//id生成策略@Column(name="id",nullable=false)//列3列注解@Column(name="name",nullable=false)//列注解需要加在属性的get方法上4spring注解@Repository //标签是用来给持久层的类定义一个名字,让Spring根据这个名字关联到这个类。

@Service//@Service是用于服务层的IServiceImpl类文件,功能与@Repository类似@Scope("prototype")//定义默认的组件上下文@Autowired//用来注入属性@Resource //@Resource 的作用相当于 @Autowired,只不过 @Autowired 按 byType 自动注入,面 @Resource 默认按 byName 自动注入5dwr注解@RemoteProxy表示这个类将用于远程方法,而使用@RemoteMethod指定所要暴露的方法,没有使用@RemoteMethod的方法将不会显示在客户端@D a t a T r a n s f e r O b j e c t对应于原来d w r.x m l文件中的c o n v e r t标签,用于转换J a v a对象;@R e m o t e P r o p e r t y则对应于c o n v e r t标签中的<p a r a m n a m e=”i n c l u d e”v a l u e=”"/>。

Dwr Extjs应用Ext无法直接读取list内容,需要配置显示list数据的POJO,代码如下package com.demo.util;import java.util.ArrayList;import java.util.List;import org.directwebremoting.annotations.DataTransferObject; /**** @description:用来存储分页查询结果的POJO类* @author: Shell* @date: 2011-11-14上午09:43:56* @file: com.zzidc.support.util.PageResult.java* @param <T>*/@DataTransferObjectpublic class PageResult<T> {private Integer rowCount = 0;private List<T> data = new ArrayList<T>();public PageResult(List<T> data, Integer rowCount) { this.data = data;this.rowCount = rowCount;}public PageResult() {super();}public Integer getRowCount() {return rowCount;}public void setRowCount(Integer rowCount) {this.rowCount = rowCount;}public List<T> getData() {return data;}public void setData(List<T> data) {this.data = data;}}Service中获取所有数据的方法/*** 获取所有数据* @param request* @return*/@RemoteMethodpublic PageResult<Company> getAll(HttpServletRequest request){PageResult<Company> page=new PageResult<Company>();List<Company> list=companyDao.getAll();page.setRowCount(list.size());page.setData(list);//代理var proxy=new Ext.data.DWRProxy(CompanyService.getAll,true);//声明记录var number=new Ext.data.Record.create([{name:"id"},{name:"name"},{name:"price"},{name:"changes"}]);//readervar reader=new Ext.data.ListRangeReader({totalProperty : 'rowCount'},number);//创建Storevar store=new Ext.data.Store({proxy:proxy,//代理reader:reader,//readerautoLoad:true,//自动加载remoteSort : true});return page;}注意:在service层中,在需要调用的方法参数列表中,需要加入HttpServletRequest request参数。

使用上方步骤配置hibernate spring dwr 注解后,便可取得数据,下列代码用于创建extjs 的store。

//代理Var proxy=new Ext.data.DWRProxy(CompanyService.getAll,true);//声明记录var number=new Ext.data.Record.create([{name:"id"},{name:"name"},{name:"price"},{name:"changes"}]);//readervar reader=new Ext.data.ListRangeReader({totalProperty : 'rowCount'},number);//创建Storevar store=new Ext.data.Store({proxy:proxy,//代理reader:reader,//readerautoLoad:true,//自动加载remoteSort : true});附录:java注解Java注解相当于对类或者方法或者变量的额外注释(标识)。

Annotation是Java5、6只后的新特征(中文称之为注解),并且越来越多的得到了应用,比如Spring、Hibernate3、Struts2、iBatis3、JPA、JUnit等等都得到了广泛应用,通过使用注解,代码的灵活性大大提高。

注解的神秘之处在于:通过类似注释的方式,可以控制程序的一些行为,运行时的状态,可以为成员赋值,做配置信息等等,与常规编码思维大相径庭。

只用别人定义好的注解是搞不懂这些问题的,要想真正知道注解内部的秘密,要自己定义注解,然后在程序中获取注解信息,拿到注解信息后,就可以为我所用了。

定义注解需要在开头加入@Retention()//指示编译器如何对待您的自定义Annotation@Target()//指定注解类型下面我简单演示下三类注解的用法:类注解、方法注解、字段(也称之域)注解的定义与适用,并看看如何获取注解的信息。

一、定义注解package lavasoft.anntest;import ng.annotation.ElementType;import ng.annotation.Retention;import ng.annotation.RetentionPolicy;import ng.annotation.Target;/*** 类注解** @author leizhimin 2009-12-18 14:15:46*/@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.TYPE)public @interface MyAnnotation4Class {public String msg();}package lavasoft.anntest;import ng.annotation.ElementType; import ng.annotation.Retention; import ng.annotation.RetentionPolicy; import ng.annotation.Target;/*** 方法注解** @author leizhimin 2009-12-18 14:16:05*/@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.METHOD)public @interface MyAnnotation4Method {public String msg1();public String msg2();}package lavasoft.anntest;import ng.annotation.ElementType; import ng.annotation.Retention; import ng.annotation.RetentionPolicy; import ng.annotation.Target;/*** 字段注解** @author leizhimin 2009-12-18 15:23:12*/@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.FIELD)public @interface MyAnnotation4Field {public String commont();public boolean request();}二、写一个类,用上这些注解package lavasoft.anntest;/*** 一个普通的Java类*/@MyAnnotation4Class(msg = "测试类注解信息")class TestClass {@MyAnnotation4Field(commont = "成员变量的注解信息", request = true) private String testfield;@MyAnnotation4Method(msg1 = "测试方法注解信息1", msg2 = "测试方法注解信息2")public void testMethod() {System.out.println("Hello World!");}}三、测试注解为了使用注解,需要通过反射获取注解的对象。

相关文档
最新文档