DWR
DWR
杨林伟
像火箭科学家一样思考!
展开
-
62dwr - 常见问题(没有 cookies 的情况下用 DWR)
当不能用 cookies 时,servlet 规范通过 URL 重写来支持 HttpSession。DWR 2.x 通过它生成的 URL 来支持这项功能。但是 DWR 1.x 没有这个功能。你可以通过以下办法让 DWR 1.x 也支持 cookies:从 dwr.jar 中提取 engine.js,保存到你的文件系统中,就像 jsp 文件一样.修改"DWREngine._sendData =...原创 2019-04-29 17:10:21 · 275 阅读 · 0 评论 -
61dwr - 常见问题(使用 weblogic 的类路径问题)
Weblogic 8.1(有可能其他版本同样)可能找不到 DWR 的类。这大多出现在 dwr.jar 放在 APP-INF 目录下(APP_INF/lib)的情况。在这种情况下 DWR 依然可以工作,例如 debug 页面可以看见,但是 DWR 找不到你的类。解决办法是把 dwr.jar 放到 WEB-INF/lib 目录下。...原创 2019-04-29 17:08:29 · 343 阅读 · 0 评论 -
60dwr - 常见问题(XML 解析错误)
这是一开始用 DWR 会产生的常见的错误,无论对 DWR 做什么都不会有用,主要是因为 Tomcat 里面自带的 Xerces 的问题,要么是该有的时候没有,要么是不该有的时候有了。JDK 1.3 自身没有 XML 解析器,所以你需要 xercesImpl.jar 和 xml-apis.jar.JDK 1.4.0 和 JDK 1.4.1 虽然有了 XML 解析器,但是有很多 bug,所以你...原创 2019-04-29 17:06:46 · 486 阅读 · 0 评论 -
58dwr - 购物车案例(总结)
DWR 的利弊在 DWR 中,可以在一个 HTTP 请求中向服务器发送多个远程调用。调用 DWREngine.beginBatch() 告诉 DWR 不要直接分派后续的远程调用,而是把它们组合到一个批请求中。DWREngine.endBatch() 调用则把批请求发送到服务器。远程调用在服务器端顺序执行,然后调用每个 JavaScript 回调。批处理在两方面有助于降低延迟:第一,避免了为每个...原创 2019-04-29 17:02:21 · 339 阅读 · 0 评论 -
57dwr - 购物车案例(演示结果)
图 3 显示了这个基于 DWR 的 Ajax 应用程序的使用情况:显示了通过搜索检索到的商品,并在右侧显示用户的购物车:图 3. 基于 DWR 的 Ajax 商店应用程序的使用情况...原创 2019-04-29 16:56:43 · 322 阅读 · 0 评论 -
56dwr - 购物车案例(调用远程的 Cart 方法)
首先,当商店的 Web 页首次装入时,我想检查保存在会话中的 Cart 的状态,看是否已经有一个购物车了。这是必需的,因为用户可能已经向 Cart 中添加了商品,然后刷新了页面或者导航到其他地方之后又返回来。在这些情况下,重新载入的页面需要用会话中的 Cart 数据对自己进行同步。我可以在页面的onload 函数中用一个调用做到这一点,就像这样:Cart.getCart(displayCart)。...原创 2019-04-29 16:55:01 · 432 阅读 · 0 评论 -
55dwr - 购物车案例(实现购物车)
用户购物车的 Java 表示基于 Map。当 Item 添加到购物车中时,Item 本身作为键被插入 Map。Map 中对应的值是一个 Integer,代表购物车中指定 Item 的数量。所以 Cart.java 有一个字段 contents,声明为 Map<Item,Integer>。使用复杂类型作为哈希键给 DWR 带来一个问题 —— 在 JavaScript 中,数组的键必须是...原创 2019-04-29 16:51:46 · 381 阅读 · 0 评论 -
54dwr - 购物车案例(调用远程对象)
远程 Java 对象方法和对应的 JavaScript 存根函数之间的映射很简单。通用的形式是JavaScriptName.methodName(methodParams ..., callBack),其中 JavaScriptName 是 creator 的javascript 属性指定的名称,methodParams 代表 Java 方法的 n 个参数,callback 是要用 Java 方法...原创 2019-04-29 16:38:31 · 312 阅读 · 0 评论 -
53dwr - 购物车案例(测试部署)
如果 DWRServlet 的 web.xml 定义把 init-param debug 设置为 true,那么就启用了 DWR 非常有帮助的测试模式。导航到 /{your-web-app}/dwr/ 会把 DWR 配置的要进行远程的类列表显示出来。在其中点击,会进入指定类的状态屏幕。CatalogDAO 的 DWR 测试页如图 2 所示。除了提供粘贴到 Web 页面的script 标记(指向 D...原创 2019-04-29 16:34:43 · 368 阅读 · 0 评论 -
53dwr - 购物车案例(实现目录)
DWR 应用程序的起点是编写服务器端对象模型。在这个示例中,我从编写 DAO 开始,用它提供对产品目录数据存储的搜索功能。CatalogDAO.java 是一个简单的无状态的类,有一个无参数的构造函数。清单1 显示了我想要公开给 Ajax 客户的 Java 方法的签名。清单 1. 通过 DWR 公开的 CatalogDAO 方法接下来,我需要配置 DWR,告诉它 Ajax 客户应当能够构建 ...原创 2019-04-29 16:32:27 · 348 阅读 · 0 评论 -
52dwr - 购物车案例(介绍)
我将采用一个基于在线商店的最小模型,这次包含一个基本的产品表示、一个可以包含产品商品的用户购物车以及一个从数据存储查询产品的数据访问对象(DAO)。Item 类与前一篇文章中使用的一样,但是不再实现任何手工序列化方法。图 1 说明了这个简单的设置:图 1. 说明 Cart、CatalogDAO 和 Item 类的类图在这个场景中,我将演示两个非常简单的用例。第一,用户可以在目录中执行文本搜...原创 2019-04-29 16:26:59 · 354 阅读 · 0 评论 -
51dwr - 安全
我们很谨慎的对待 DWR 的安全问题,并且认为有必要解释一下避免错误要做的事情。首先 DWR 让你明确哪些是被远程调用的,是如何被远程调用。原则就是 DWR 必须调用那些你明确允许的代码。dwr.xml 要求你为每一个远程类定义一个’create’项。你还可以通过指定 include 和 exclude 元素来更精确的控制远程调用 Bean 中可以被调用的方法。除此之外如果你希望允许 DWR...原创 2019-04-29 16:21:30 · 318 阅读 · 0 评论 -
50dwr - 从其他的 URL 读取数据
如果你需要读取其他 web 应用程序生成的页面,并返回到 Javascript 中。非常简单。只要在你的 Java 类里面包括下面这写代码:public String getInclude() throws ServletException, IOException{ return WebContextFactory.get().forwardToString("/forward.jsp");...原创 2019-04-29 16:16:00 · 282 阅读 · 0 评论 -
49dwr - 传递额外的数据到 callback 函数
通常我们需要传递额外的数据到 callback 函数,但是因为所有的回调函数都只有一个参数(远程方法的返回结果),这就需要一些小技巧了。解决方案就是使用 Javascript 的闭包特性。例如,你的回调函数原本需要像这个样子:function callbackFunc(dataFromServer, dataFromBrowser) { // 用dataFromServer和dataFr...原创 2019-04-29 16:13:52 · 305 阅读 · 0 评论 -
48dwr - 找出异常更多信息
我们可以把整个异常传地到 Javascript 中。如果在 dwr.xml 中加入转换异常本身的能力:<convert converter="bean" match="my.special.FunkyException"/>在这里例子中 FunkyException 被指定,因为它不仅仅包括一个消息,它还包括一些关于异常的额外数据。例如,SQLException 包含错误号,S...原创 2019-04-29 16:07:30 · 269 阅读 · 0 评论 -
47dwr - 异常
DWR 可以转换异常,这样他们会变成 Javascript 中的错误(他们可以被抛出,因为这可能在异步调用中发生)。例如,如果我们远程调用下面的 Java 类:public class Remote { public String getData() { throw new NullPointerException("message"); }}那么在 Javascript 中我们加...原创 2019-04-29 15:57:53 · 345 阅读 · 0 评论 -
46dwr - 错误处理
在 1.0 版中错误处理规则有些 bug,1.1 修复了这些错误。DWR 中有一些全局的处理器(一个错误相关的, 叫做 errorHandler, 另一个警告相关的, 叫做warningHandler)。DWR 会默认指定一些全局处理器。你可以这样的改变全局级别的处理器:DWREngine.setErrorHandler(handler);你也可以指定单次调用和批量调用的错误和警告处理。例...原创 2019-04-29 15:56:23 · 496 阅读 · 0 评论 -
45dwr - DWR Annotations
DWR 标注是用来代替 dwr.xml 或者与其一同工作的。初始配置要使用 DWR 的标注,你需要在 web.xml 中配置不同的 DWR 控制器。<servlet> <description>DWR controller servlet</description> <servlet-name>DWR controller servlet&...原创 2019-04-29 15:53:25 · 277 阅读 · 0 评论 -
44dwr - util.js 功能(Submission box)
h1 非 util.js 中的功能这里有一些功能不适合加入到 DWRUtil 中。它们在解决一下特殊问题是很有用,但是他们还不够通用以适用任何场合。修补浏览器事件如果你创建了一个 DOM 元素,然后用 addAttribute 在这个元素上创建了一个事件,那么他们不能被正常的触发。你可以使用下面的脚本来遍历一个 DOM 树,并重新为他们绑定事件,这样他们就能正常的触发了。把click改...原创 2019-04-29 15:47:06 · 316 阅读 · 0 评论 -
43dwr - util.js 功能(useLoadingMessage)
这个方法将来可能被废弃,因为这个实现实在太专断了。为什么是红色,为什么在右上角,等等。唯一的真正答案就是:抄袭 GMail。这里的建议是以本页面中的代码为模板,根据你的需求自定义。你必须在页面加载以后调用这个方法(例如,不要在 onload()事件触发之前调用),因为它要创建一个隐藏的div 来容纳消息。最简单的做法时在 onload 事件中调用 DWRUtil.useLoadingMessa...原创 2019-04-29 15:43:34 · 343 阅读 · 0 评论 -
42dwr - util.js 功能(toDescriptiveString)
DWRUtil.toDescriptiveString()函数比默认的 toString()更好。第一个参数是要调试的对象,第二个参数是可选的,用来指定内容深入的层次:0: 单行调试1: 多行调试,但不深入到子对象。2: 多行调试,深入到第二层子对象以此类推。一般调试到第二级是最佳的。还有第三个参数,定义初始缩进。这个函数不应该被用于调式程序之外,因为以后可能会有变化。...原创 2019-04-29 15:40:01 · 371 阅读 · 0 评论 -
41dwr - util.js 功能(setValues)
setValues()和 setValue()非常相似,除了输入的是包含 name/value 对的 javascript 对象。name 是 HTML元素的 ID,value 是你想要设置给相应的元素的值。原创 2019-04-29 15:39:11 · 645 阅读 · 0 评论 -
40dwr - util.js 功能(setValue)
DWRUtil.setValue(id, value)根据第一个参数中指定的 id 找到相应元素,并根据第二个参数改变其中的值。这个函数能操作大多数 HTML 元素包括 select(去处当前选项的值而不是文字)、input 元素(包括 textarea)、div 和 span。...原创 2019-04-29 15:38:22 · 564 阅读 · 0 评论 -
39dwr - util.js 功能(selectRange)
选择一个输入框中的一定范围的文字。你可能为了实现类似"Google suggest"类型的功能而需要选择输入框中的一定范围的文字,但是不同浏览器间选择的模型不一样。这 DWRUtil 函数可以帮你实现.DWRUtil.selectRange(ele, start, end);...原创 2019-04-29 15:37:35 · 383 阅读 · 0 评论 -
38dwr - util.js 功能(onReturn)
当按下 return 键时,得到通知。当表单中有 input 元素,触发 return 键会导致表单被提交。当使用 Ajax 时,这往往不是你想要的。而通常你需要的触发一些 Javscript。不幸的是不同的浏览器处理这个事件的方式不一样。所以 DWRUtil.onReturn 修复了这个差异。如果你需要一个同表单元素中按回车相同的特性,你可以用这样代码实现:<input type=...原创 2019-04-29 15:36:32 · 401 阅读 · 0 评论 -
37dwr - util.js 功能(getValues)
getValues()和 getValue()非常相似,除了输入的是包含 name/value 对的 javascript 对象。name 是 HTML元素的 ID,value 会被更改为这些 ID 对象元素的内容。这个函数不会返回对象,它只更改传递给它的值。从 DWR1.1 开始 getValues()可以传入一个 HTML 元素(一个 DOM 对象或者 id 字符串),然后从它生成一个re...原创 2019-04-29 15:34:53 · 511 阅读 · 0 评论 -
36dwr - util.js 功能(getValue)
DWRUtil.getValue(id)是 setValue()对应的"读版本"。它可以从 HTML 元素中取出其中的值,而你不用管这个元素是 select 列表还是一个 div。这个函数能操作大多数 HTML 元素包括 select(去处当前选项的值而不是文字)、input 元素(包括 textarea)、div 和 span。...原创 2019-04-29 15:33:55 · 429 阅读 · 0 评论 -
35dwr - util.js 功能(getText)
getText(id)和 getValue(id)很相似。出了它是为 select 列表设计的。你可能需要取得显示的文字,而不是当前选项的值.原创 2019-04-29 15:32:20 · 351 阅读 · 0 评论 -
34dwr - util.js 功能(addRows and removeAllRows)
DWR 通过这两个函数来帮你操作 table: DWRUtil.addRows() 和 DWRUtil.removeAllRows() 。这个函数的第一个参数都是 table、tbody、thead、tfoot 的 id。一般来说最好使用 tbody,因为这样可以保持你的header 和 footer 行不变,并且可以防止 Internet Explorer 的 bug。DWRUtil.remo...原创 2019-04-29 15:31:26 · 426 阅读 · 0 评论 -
33dwr - util.js 功能(addOptions 和removeAllOptions)
DWR 的一个常遇到的任务就是根据选项填充选择列表。下面的例子就是根据输入填充列表。下面将介绍 DWRUtil.addOptions() 的几种是用方法。如果你希望在你更新了 select 以后,它仍然保持运来的选择,你要像下面这样做:var sel = DWRUtil.getValue(id);DWRUtil.removeAllOptions(id);DWRUtil.addOption...原创 2019-04-29 15:27:54 · 945 阅读 · 0 评论 -
32dwr - util.js 功能($())
$() 函数(它是合法的 Javascript 名字) 是从 Protoype 偷来的主意。大略上的讲: $ = document.getElementById。 因为在 Ajax 程序中,你会需要写很多这样的语句,所以使用 $() 会更简洁。通过指定的 id 来查找当前 HTML 文档中的元素,如果传递给它多个参数,它会返回找到的元素的数组。所有非 String 类型的参数会被原封不动的返回。...原创 2019-04-29 15:24:05 · 318 阅读 · 0 评论 -
31dwr - util.js 功能
util.js 包含了一些工具函数来帮助你用 javascript 数据(例如从服务器返回的数据)来更新你的 web 页面。你可以在 DWR 以外使用它,因为它不依赖于 DWR 的其他部分。你可以下载整个 DWR 或者单独下载.4 个基本的操作页面的函数:getValue[s]()和 setValue[s]()可以操作大部分 HTML 元素除了 table,list 和image。get...原创 2019-04-29 15:21:42 · 338 阅读 · 0 评论 -
30dwr - engine.js 功能(选项说明)
批量调用你可以使用 batch 来批量的执行远程调用。这样可以减少与服务器的交互次数,所以可以提交反应速度。一个 batch 以 DWREngine.beginBatch() 开始 ,并以 DWREngine.endBatch() 结束。当DWREngine.endBatch() 被调用,我们就结束了远程调用的分组,这样 DWR 就在一次与服务器的交互中执行它们。DWR 会小心的处理保证所有...原创 2019-04-29 15:13:48 · 457 阅读 · 0 评论 -
29dwr - engine.js 功能(选项索引)
下面是可用选项列表:处理器(Handler)调用处理器(Call Handler)Hooks (一个 batch 中可以注册多个 hook)全局选项(在单次调用或者批量调用中不可用)废弃的选项未来版本的选项...原创 2019-04-29 15:06:51 · 314 阅读 · 0 评论 -
28dwr - engine.js 功能(使用选项)
下面这些选项可以通过 DWREngine.setX() 函数来设置全局属性。例如:DWREngine.setTimeout(1000);或者在单次调用级别上(假设 Remote 被 DWR 暴露出来了):Remote.singleMethod(params, { callback:function(data) { ... }, timeout:2000 });远程调用可以批量执行来...原创 2019-04-29 15:01:28 · 367 阅读 · 0 评论 -
27dwr - engine.js 功能
engine.js 对 DWR 非常重要,因为它是用来转换来至动态生成的接口的 javascript 函数调用的,所以只要用到 DWR 的地方就需要它。每一个页面都需要下面这些语句来引入主 DWR 引擎。<script type="text/javascript" src="/[YOUR-WEB-APP]/dwr/engine.js"></script>...原创 2019-04-29 14:59:02 · 398 阅读 · 0 评论 -
26dwr - DWR中的JavaScript(创造一个与 Java 对象匹配的 Javascript 对象)
假设你有这样的 Java 方法:public class Remote { public void setPerson(Person p) { this.person = p; }}Person 对象的结构是这样的:public Person { private String name; private int age; private Date[] appointmen...原创 2019-04-29 14:56:52 · 401 阅读 · 0 评论 -
25dwr - DWR中的JavaScript(查找回调函数)
有些情况下我们很难区分各种回调选项(记住,Javascript 是不支持函数重载的)。例如:Remote.method({ timeout:3 }, { errorHandler:somefunc });这两个参数之一是 bean 的参数,另一个是元数据对象,但是我们不能清楚的告诉 DWR 哪个是哪个。为了可以跨浏览器,我们假定 null == undefined。 所以当前的情况,规则是:...原创 2019-04-29 14:53:11 · 427 阅读 · 0 评论 -
24dwr - DWR中的JavaScript(调用元数据对象)
另外一种语法时使用"调用元数据对象"来指定回调函数和其他的选项。上面的例子可以写成这样:Remote.getData(42, { callback:function(str) { alert(str); }});这种方法有很多优点:易于阅读,更重要的指定额外的调用选项。在回调函数的元数据中你可以指定超时和错误的处理方式。例如:Remote.getData(42, { callba...原创 2019-04-29 14:51:12 · 319 阅读 · 0 评论 -
23dwr - DWR中的JavaScript(简单的回调函数)
假设你有一个这样的 Java 方法:public class Remote { public String getData(int index) { ... }}我们可以在 Javascript 中这样使用:<script type='text/javascript' src='[WEBAPP]/dwr/engine.js'></script><scr...原创 2019-04-29 14:48:21 · 298 阅读 · 0 评论