dwr学习笔记.doc_第1页
dwr学习笔记.doc_第2页
dwr学习笔记.doc_第3页
dwr学习笔记.doc_第4页
dwr学习笔记.doc_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

DWR 1.1.3 学习笔记第一个HelloWorld程序!首先需要配置“DWR环境”,那样才能使用javascript调用java类的代码1、 添加dwr.jar到web-app/WEB-INF/lib目录中。2、 在web-app/WEB-INF目录下创建dwr.xml文件,并写入以下代码:3、 修改web.xml文件,内容如下dwr-invokerorg.directwebremoting.servlet.DwrServletdebugtruedwr-invoker/dwr/*如果使用logging时,commons-logging和log4j是默认的配置,当然也可以使用HttpServlet.log()方法。 logLevel DEBUG有效值为: FATAL, ERROR, WARN (the default), INFO and DEBUG.这样就把DWR环境配置好了!那么开始第一个HelloWorld程序第一步:编写 HelloWorld.java :package com.willmobile.ajaxtm;public class HelloWorld public String sayHelloWorldTo(String name) return Hello World + name + !;第二步:编辑dwr.xml文件,在标签内添加下面代码:为了与java的HelloWorld类表示区别javascript的Helloworld的“w”是小写的第三步:把web 应用发布到tomcat的webapps里面, 运行tomcat服务器,然后输入以下http:/localhost:8080/web-app/dwr/打开网页,点击“Helloworld”进入另一个页面把上面的三个都拷贝起来,并且在web-app下面创建一个index.jsp的页面。其代码如下: window.onload = function() Helloworld.sayHelloWorldTo(JavaTwo 2008, function(returnStr) $(output).innerHTML = returnStr;);第四步:输入 http:/localhost:8080/web-app 即可看到想要的结果了!创建一个与结合的例子:第一步:创建一个Person bean:package com.my.learn.beanConvertor;public class Person private String name;private int age;public int getAge() return age;public void setAge(int age) this.age = age;public String getName() return name;public void setName(String name) = name;第二步:创建一个Remote bean,这个做为远程调用的package com.my.learn.beanConvertor;public class Remoted private Person p;public void setPerson(Person p) this.p = p;System.out.println(The persons name is: + p.getName()+ and age is: + p.getAge();/查看运行效果第三步:在标签里注册bean:/这个转换是为Remoted.setPerson(Person)转换类型用的。也就是指从javascript传参数到java时需要转换如果使converter=object的话,那么还得需要一个参数,才能与converter=bean达到相的效果。如下:第四步:输入http:/localhost:8080/learndwr/dwr 复制三个所以定的脚本文件,并且粘贴到新建的html网页里头 var p = name:Fred,age:21;remoted.setPerson(p); 第五步:查看运行效果使用枚举型(enum)转换器:第一步:声明枚举类:package com.my.learn.beanConvertor;public enum Status PASS, FAIL创建使用枚举的类:package com.my.learn.beanConvertor;public class Remoted public void setStatus(Status p)System.out.println(p.toString();第二步:在dwr.xml里配置和注:这个enum是:当在网页里调用remoted.setStatus(Status)时才使用的转换器,它是将参数字符串转换成java的Status参数第三步: remoted.setStatus(PASS); 第四步:查看效果使用collection类型转换器:第一步:import java.util.List;import com.my.learn.beanConvertor.Person;public class CollectionRemote private List persons;public void setPersons(List persons) this.persons = persons;if (this.persons != null) for (Iterator i = this.persons.iterator(); i.hasNext();) Person person = i.next();System.out.println(name: + person.getName() + age: + person.getAge(); else System.out.println(Persons is null);第二步: “match”所需要填入的值只需要是Collection的实现类或是子接口即可让collection转换器转换第三步:集合var p1=name:name1,age:11;var p2=name:name2,age:22;var p=new Array(); /dwr使用javascript的Array与java的数组、集合转换,只要使用相应的转换器p0=p1;p1=p2;collectionRemote.setPersons(p);第四步:查看效果使用map转换器第一步:package com.my.learn.collectionAndSignature;import java.util.Iterator;import java.util.Map;import java.util.Setimport com.my.learn.beanConvertor.Person;private Map persons1;public class CollectionRemote private List persons;private Map persons1;public void setString(Map s)Set keys=s.keySet();for(Iterator i=keys.iterator();i.hasNext();)String key=i.next();System.out.println(Key: +key+ object: +s.get(key);public void setPersons1(Map persons1) this.persons1 = persons1;if (this.persons1 != null) Set keys = persons1.keySet();for (Iterator i = keys.iterator(); i.hasNext();) String key = i.next();Person p = persons1.get(key);System.out.println(Key: + key + person name: + p.getName() + age: + p.getAge();第二步:第三步:集合var p1=name:name1,age:11;var p2=name:name2,age:22;var s=stringKey1:stringObject1,stringKey2:stringObject2;collectionRemote.setString(s);var ps=person one:p1,person 2:p2;collectionRemote.setPersons1(ps);创建与关联的DWR应用第一步:创建一个POJO类。使javascript操作对象package com.my.learn.form;public class User private String id;private String name;private String title;public User(final String id, final String name, final String title) this.id = id; = name;this.title = title;public String getId() return id;public void setId(String id) this.id = id;public String getName() return name;public void setName(String name) = name;public String getTitle() return title;public void setTitle(String title) this.title = title;第二步:创建一个操作类,用来让javascript能够远程调用到的java代码:package com.my.learn.form;import java.util.LinkedList;import java.util.List;public class UserManager private List users= new LinkedList();public synchronized void addUser(User user)users.add(user);public synchronized List getAllUsers()return this.users;第三步:配置dwr.xml,使用dwr2.0m.jar配置起来与以前版本不一样,更简单了。第四步:创建jsp文件(重点在这里),并写入javascript代码与FORM关联 function addUser() var user = id:, name:, title: ;DWRUtil.getValues(user);Manager.addUser(user); Manager.getAllUsers(fillTable);/从java代码取出数据后需要再用fillTable函数作处理var cellFuncs = /网格函数数组, function(data) return data.id; ,/每个函数都能生成一个,中数据就是data.id的值 function(data) return ; , function(data) return data.title; ;function fillTable(users) DWRUtil.removeAllRows(usersBody); DWRUtil.addRows(usersBody,users,cellFuncs);/创建一个idnametitle学做 Chat(聊天室)第一步:创建POJO类DWR DTD 文档说明: 在定义或,在dwr.jar包里可看到更多已定义的和 (默认,已经被定义了) 定义DWR可以和的java类 在每个类执行的方法都需要一个入口。 JDK给我们提供了许多类型可以使用,但我们需要确定所有类型的参数可以被正确转换,就得让DWR允许转换我们的代码,也就是说JavaBean参数需要一个入口下面是DWR能够默认转换的,无需额外的声明1、 所以基本类型(primitive types)如 boolean, int, double, 等等。2、 基于类的包裹类:Boolean, Integer, 等等。3、 java.lang.String4、 java.util.Date和 3个 SQL 派生类5、 上面类型所组成的数组类型6、 由上面类型所组成的集合类型,如(Lists, Sets, Maps, Iterators, 等等)7、 DOM 对象 如:DOM, XOM, JDOM and DOM4J(中的 Element 和 Document) . 大多数的元素是可选的,我们真正需要指定的是creator和javascript名字creator属性是必需,下面有8个creator(构造器)1、 new:使用java的“new”方法2、 none:不创建对象3、 script:通过脚本语言,如BeanShell、Groovy4、 spring:通过spring框架访问spring定义的bean5、 jsf:从JSF中使用 对象6、 struts:使用struts的FormBean7、 pageflow:可以从Beehive或weblogic访问页面流javascript属性:在浏览器中给出一个对象名,应该避免使javascript保留字scope属性:与Servlet、JSP一样同样具有“application”、“session”、“request”、“page”此属性是可选的,它默认是“page”值,使用“session”时,需要cookie,当前的DWR不支持URL重写。none属性:不创建任何对象。以下两个理由,我们就不需要创建对象:1、 如果调用到static方法那么就可以不用对象构造器了,DWR在决定是否调用creator时会先核对是不是调用到static方法。如:需要构建对象时creator=”new”,不需要是就是creator=”none”2、 可能会使用到除“page”之外的scope,并已经把对象装到scope里头时,就可以不用对象构造器了元素:指定相应的配置位和值,如: 指定creator为new时,param的name就指定为class value就指定java类的全称 只有Fred.setWibble()方法能被访问到,其余的不能指定creator为spring时,param的beanName 就指定为beanName,value就指定spring配置文件中的 id/元素:指定限制可访问的方法。除指定之外的方法不可以被javascript访问到;除指定的方法不能被访问外,其余都可以被访到。指定角色的权限检查,如: 当访问到setWibble方法时,检查是否具有admin权限DWR and HttpSessionBindingListenersDWR会对每个请求都调用相应的scope.setAttribute()方法来保存已创建的bean。那么,当我们在dwr.xml中指定bean的生命周期是session的话,就会调用session.setAttribute(“bean”)方法。也就是说,当我们每次调用bean中的方法都会再次调用session.setAttribute(“bean”)方法。如果我们通过实现HttpSessionBindingListensers接口来尝试使用servlet事件的话,就会看到值被“绑定”和“解绑定”在DWR 2 中只在第一次创建bean对象的时候调用setAttribute()Util.js的常用方法说明:第一步:创建一个servlet类,代码如下:import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class GetServlet extends HttpServlet protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException String select = req.getParameter(demo);if(select!=null)System.out.println(select);第二步:Html代码如下:/在这里写入要给标签注入的DWRUtil.addOptions()1、使用简单数组:DWRUtil.addOptions(selectid, array):selectid指定的idarray: 使用数组元素来创建如:var array=new Array();array0=1;array1=2;DWRUtil.addOptions(demo,array);以上代码就创建了使用简单数组所创建的是value与text都是相同的arrayi值。2、使用对象数组,指定的text:DWRUtil.addOptions(selectid, data, textprop):selectid指定的idarray: 使用数组元素来创建textprop:的text属性所对应的数组元素 对象的属性如:3、使用对象数组并指定的text和value:DWRUtil.addOptions(selectid, array, valueprop, textprop) 如:4、使用Map来与的value和text对应: DWRUtil.addOptions(selectid, map, reverse)是否让map的key和value反转key: value=key 如:使用反转那么会像第二示例一样5、同样可以用来给或添加如:可以用使用DWRUtil.addOptions(selectid, array)为或添加(而不是);DWRUtil.addOptions(ul1, Africa, America);DWRUtil.removeAllOptions(id)只需要指定、或的id即可DWRUtil.addRows()和DWRUtil.removeAllRows()对于两个方法的第一个参数都是、和的id。一般来说,是使用标签,一方面,在IE 下使用可能javascript可能不能的id显示;另一方面,不使用和,也能保持的相对整洁。DWRUtil.addRows(id, array, cellfuncs, options);id: The id of the table element (preferably a tbody element) array: Array (or object from DWR 1.1) containing one entry for each row in the updated table cellfuncs: An array of functions (one per column) for extracting cell data from the passed row data options: An object containing various options (see below)id: 的id (优先考虑的id) array: 为要修改的包含每个行一个条目cellfuncs: 一个由函数数组组成的对象(一个函数/每列)从已传递的行数据中提取单元格数据options: 一个包含不同选项的对象可用的选项:rowCreator: a function that will create a row for you (e.g. you wish to add css to the tr). The default returns document.createElement(tr) cellCreator: a function to create a cell, (e.g. to use a th in place of a td). The default returns document.createElement(td)rowCreator: 可以创建一个行的函数 (e.g.你希望添加css到). 默认情况下只document.createElement(tr) cellCreator: 可以创建一个单元格的函数 (e.g.你希望添加css到). 默认情况下只document.createElement(td)那么就来一个完整的实例:UnalteredAlteredButtonCountvar cellFuncs = function(data) return data; , function(data) return data.toUpperCase(); , function(data) return ;, function(data) return count+; ; var count = 6;DWRUtil.addRows( demo1, Africa, America, Asia, Australasia, Europe , cellFuncs, rowCreator:function(options) var row = document.createElement(tr); var

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论