﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-爱情种子-文章分类-DWR</title><link>http://www.blogjava.net/Crying/category/25560.html</link><description>为了自己</description><language>zh-cn</language><lastBuildDate>Thu, 13 Sep 2007 08:50:26 GMT</lastBuildDate><pubDate>Thu, 13 Sep 2007 08:50:26 GMT</pubDate><ttl>60</ttl><item><title>DWR  实现联动下拉列表</title><link>http://www.blogjava.net/Crying/articles/144828.html</link><dc:creator>Crying</dc:creator><author>Crying</author><pubDate>Thu, 13 Sep 2007 05:16:00 GMT</pubDate><guid>http://www.blogjava.net/Crying/articles/144828.html</guid><wfw:comment>http://www.blogjava.net/Crying/comments/144828.html</wfw:comment><comments>http://www.blogjava.net/Crying/articles/144828.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Crying/comments/commentRss/144828.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Crying/services/trackbacks/144828.html</trackback:ping><description><![CDATA[<p>&nbsp;记得dwr.jar要加入到WEB-INF/lib<br />
在WEB.XML中加入<br />
</p>
<p>&lt;servlet&gt;<br />
&nbsp;&nbsp;&lt;servlet-name&gt;dwr-invoker&lt;/servlet-name&gt;<br />
&nbsp;&nbsp;&lt;servlet-class&gt;<br />
&nbsp;&nbsp;&nbsp;org.directwebremoting.servlet.DwrServlet<br />
&nbsp;&nbsp;&lt;/servlet-class&gt;<br />
&nbsp;&nbsp;&lt;init-param&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;param-name&gt;debug&lt;/param-name&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;param-value&gt;true&lt;/param-value&gt;<br />
&nbsp;&nbsp;&lt;/init-param&gt;<br />
&nbsp;&lt;/servlet&gt;</p>
<p>&nbsp;&lt;servlet-mapping&gt;<br />
&nbsp;&nbsp;&lt;servlet-name&gt;dwr-invoker&lt;/servlet-name&gt;<br />
&nbsp;&nbsp;&lt;url-pattern&gt;/dwr/*&lt;/url-pattern&gt;<br />
&nbsp;&lt;/servlet-mapping&gt;</p>
<p>首先写个JS要调用的类<br />
package wsq;</p>
<p>import java.util.HashMap;</p>
<p>public class Data {<br />
&nbsp;private HashMap&lt;String, String[ ]&gt; address;<br />
&nbsp;<br />
&nbsp; <br />
&nbsp;public Data() {<br />
&nbsp;&nbsp;address= new HashMap&lt;String, String[]&gt;( );<br />
&nbsp;&nbsp;address.put("--请选择--", new String[] { "--请选择--" });<br />
&nbsp;&nbsp;address.put("安徽", new String[] { "合肥", "安庆", "广德" });<br />
&nbsp;&nbsp;address.put("浙江", new String[] { "杭州", "湖州" });<br />
&nbsp;&nbsp;address.put("江苏", new String[] { "南京", "苏州", "无锡" });<br />
&nbsp;&nbsp;address.put("江西", new String[] { "南昌" });<br />
&nbsp;&nbsp;address.put("广东", new String[] { "广州", "韶关", "白云" });</p>
<p>&nbsp;}</p>
<p>&nbsp;public String[] getYears() {</p>
<p>&nbsp;&nbsp;String[] keys = new String[address.size()];<br />
&nbsp;&nbsp;int i = 0;<br />
&nbsp;&nbsp;for (String key : address.keySet()) {<br />
&nbsp;&nbsp;&nbsp;keys[i++] = key;<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;return keys;<br />
&nbsp;}</p>
<p>&nbsp;public String[] getAddress(String year) {<br />
&nbsp;&nbsp;return address.get(year);<br />
&nbsp;}<br />
}<br />
dwr.xml 的内容如下：<br />
</p>
<p>&lt;!DOCTYPE dwr PUBLIC<br />
&nbsp;&nbsp;&nbsp; "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN"<br />
&nbsp;&nbsp;&nbsp; "http://www.getahead.ltd.uk/dwr/dwr20.dtd"&gt;</p>
<p>&lt;dwr&gt;<br />
&nbsp;&lt;allow&gt;&nbsp;<br />
&nbsp;&nbsp;&lt;create creator="new"&nbsp; javascript="Address" &gt;<br />
&nbsp;&nbsp;&lt;param name="class" value="wsq.Data"&gt;&lt;/param&gt;<br />
&nbsp;&nbsp;&lt;/create&gt;<br />
&nbsp;&lt;/allow&gt;<br />
&lt;/dwr&gt;</p>
<p><br />
<br />
jsp 页面<br />
<br />
</p>
<p>&lt;%@ page language="java" pageEncoding="UTF-8"%&gt;</p>
<p>&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&gt;<br />
&lt;html&gt;<br />
&nbsp;&lt;head&gt;<br />
&nbsp;&nbsp;&lt;title&gt;list.jsp&lt;/title&gt;<br />
&nbsp;&nbsp;&lt;script type="text/javascript" src="/dwr_1/dwr/interface/Address.js"&gt;&lt;/script&gt;<br />
&nbsp;&nbsp;&lt;script type="text/javascript" src="/dwr_1/dwr/util.js"&gt;&lt;/script&gt;<br />
&nbsp;&nbsp;&lt;script type="text/javascript" src="/dwr_1/dwr/engine.js"&gt;&lt;/script&gt;<br />
&nbsp;&nbsp;&lt;script type="text/javascript"&gt;<br />
&nbsp;&nbsp; function getYears()<br />
&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp; Address.getYears(callbackYear);<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp; }<br />
&nbsp;&nbsp; function callbackYear(data)<br />
&nbsp;&nbsp; {&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DWRUtil.addOptions("oid2",["--请选择--"]);&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DWRUtil.removeAllOptions("oid1");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DWRUtil.addOptions("oid1", data);<br />
&nbsp;<br />
&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; function changYear()<br />
&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp; var year = $("oid1").value;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp; Address.getAddress(year,callback1);<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp; }<br />
&nbsp;&nbsp; function callback1(data)<br />
&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp; DWRUtil.removeAllOptions("oid2");<br />
&nbsp;&nbsp;&nbsp;&nbsp; DWRUtil.addOptions("oid2", data);<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp; }<br />
&nbsp;<br />
&nbsp;&nbsp; &lt;/script&gt;<br />
&nbsp;&lt;/head&gt;</p>
<p>&nbsp;&lt;body onload="getYears()" &gt;<br />
&nbsp;&nbsp;&lt;select id="oid1" onchange="changYear()" &gt;</p>
<p>&nbsp;&nbsp;&lt;/select&gt;<br />
&nbsp;&nbsp;&lt;select id="oid2" &gt;</p>
<p>&nbsp;&nbsp;&lt;/select&gt;<br />
&nbsp;&nbsp;<br />
&nbsp;&lt;/body&gt;<br />
&lt;/html&gt;<br />
</p>
<p><br />
&nbsp;</p>
<img src ="http://www.blogjava.net/Crying/aggbug/144828.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Crying/" target="_blank">Crying</a> 2007-09-13 13:16 <a href="http://www.blogjava.net/Crying/articles/144828.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DWR Util.js</title><link>http://www.blogjava.net/Crying/articles/144820.html</link><dc:creator>Crying</dc:creator><author>Crying</author><pubDate>Thu, 13 Sep 2007 05:03:00 GMT</pubDate><guid>http://www.blogjava.net/Crying/articles/144820.html</guid><wfw:comment>http://www.blogjava.net/Crying/comments/144820.html</wfw:comment><comments>http://www.blogjava.net/Crying/articles/144820.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Crying/comments/commentRss/144820.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Crying/services/trackbacks/144820.html</trackback:ping><description><![CDATA[<div align="left"><span style="font-size: 12pt">dwr官方地址：<a href="http://getahead.ltd.uk/dwr"><span style="color: #7a5310">http://getahead.ltd.uk/dwr</span></a></span></div>
<div align="left"><span style="font-size: 10pt">先简单介绍一下什么是DWR</span></div>
<div align="left"><span style="font-size: 12pt">DWR - Direct Web Remoting</span></div>
<div align="left"><span style="font-size: 12pt">&nbsp; ajax是一种提高web站点吸引力和实用性的书写web页面的方法。它从服务器端更新web页面的特殊区域，从而增强用户的交互性。它允许信息在短时间的延迟或不用刷新页面的情况下更新。</span></div>
<div align="left"><span style="font-size: 12pt">&nbsp; DWR减少了开发时间，也减少了一些可能的错误，这些错误是在提供常用的方法函数并消除一些与高交互性web站点有关的重复性代码的时候产生的。</span></div>
<div align="left"><span style="font-size: 12pt">&nbsp; DWR是作为开源软件(ASL verssion 2.0)而可以免费得到的。它凭借它的广阔的库、例子和指南非常易于实现。把它结合到一个现有的站点是非常简单的，同样它也可以简单地与大多数java框架结合。</span></div>
<div align="left">&nbsp;</div>
<div align="left"><strong><span style="font-size: 24pt">util.js</span></strong></div>
<div align="left"><span style="font-size: 12pt">&nbsp; util.js包含了一些使用的方法，从而帮助你利用javascript(可能)从服务器端更新你的web数据。</span></div>
<div align="left"><span style="font-size: 12pt">&nbsp; 你可以在DWR之外的地方使用它，因为它并不依赖与DWR而实现。</span></div>
<div align="left"><span style="font-size: 12pt">&nbsp; 它包含四个页面处理函数：getValue[s]()、setValue[s]()作用于除tables、lists和images以外的大多数html元素。getText()作用于select lists。</span></div>
<div align="left"><span style="font-size: 12pt">&nbsp; addRows()和removeAllRows()用于编辑tables。addOptions()和removeAllOptions()用于编辑lists(如：select lists、ul、ol)。</span></div>
<div align="left"><strong><span style="font-size: 13.5pt">$()</span></strong></div>
<div align="left"><span style="font-size: 12pt">&nbsp; $函数(在javascript中，他的名字是合法的)的思想是从prototype引进的。一般说来，$ = document.getElementById。在以后你花大量时间进行ajax编程的时候，在合适的地方使用这种格式是很有益的。</span></div>
<div align="left"><span style="font-size: 12pt">&nbsp; '$'通过给定的ID在当前HTML页面找到元素，如果多于一个的参数被提交，它就会返回一个包含已找到元素的数组。这个函数从prototype的library中得到的灵感，而且，它还能更好的工作在不同的浏览器中。</span></div>
<div align="left">&nbsp;</div>
<div align="left"><span style="font-size: 12pt">Generating Lists</span></div>
<div align="left"><span style="font-size: 12pt">&nbsp; DWR的一个功能可以给一个下拉列表(select list)添加选项，只需使用DWRUtil.addOptions()。</span></div>
<div align="left"><span style="font-size: 12pt">&nbsp; 如果你在更新列表之前，希望保留一些选项，你需要写以下一些代码：</span></div>
<div align="left"><span style="font-size: 12pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var sel = DWRUtil.getValue(id);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DWRUtil.removeAllOptions(id);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DWRUtil.addOptions(id, ...);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DWRUtil.setValue(id, sel);</span></div>
<div align="left"><span style="font-size: 12pt">&nbsp; 如果你想有个初始化选项，如：&#8220;please select&#8221;，你可以直接使用：</span></div>
<div align="left"><span style="font-size: 12pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DWRUtil.addOptions(id, ["Please select"]);</span></div>
<div align="left"><strong><span style="font-size: 18pt">DWRUtil.addOptions 有5种调用方法：</span></strong></div>
<div align="left"><span style="font-size: 12pt">Array: DWRUtil.addOptions(selectid, array) 。selectid为目标ID,array为每一项的text。</span></div>
<div align="left"><span style="font-size: 12pt">Array of objects (option text = option value): DWRUtil.addOptions(selectid, data, prop) 用text和value的集合来为每一个数组元素创建一个选项，pro参数指定text和value的值。</span></div>
<div align="left"><span style="font-size: 12pt">Array of objects (with differing option text and value): DWRUtil.addOptions(selectid, array, valueprop, textprop) 用text和value的集合来为每一个数组元素创建一个选项，valueprop确定value，textprop确定text。</span></div>
<div align="left"><span style="font-size: 12pt">Object: DWRUtil.addOptions(selectid, map, reverse) 为map中每一个属性(property)创建一个选项，属性名作为选项的value，属性的value作为选项的text。这样做看起来是错的，但实际上这种做法的确是正确的。如果reverse参数被设置为true，则属性的value还是被用做选项的value。</span></div>
<div align="left"><span style="font-size: 12pt">Map of objects: DWRUtil.addOptions(selectid, map, valueprop, textprop) 为map中的每一个对象创建一个选项，valueprop指定选项的value，textprop指定选项的text。</span></div>
<div align="left">&nbsp;</div>
<div align="left"><span style="font-size: 12pt">Generating Tables</span></div>
<div align="left"><span style="font-size: 12pt">DWRUtil.addRows()</span><span style="font-size: 12pt"> 从一个数组(第二个参数)取得值，创建table的每一行。从另一个数组(第三个参数)去得值，为table的每一行创建若干列。</span></div>
<div align="left">&nbsp;</div>
<div align="left"><span style="font-size: 12pt">DWRUtil.getText(id)</span></div>
<div align="left"><span style="font-size: 12pt">可以根据id取得text的值，这个方法只能用于select list</span></div>
<div align="left"><span style="font-size: 12pt">DWRUtil.getValue(id)</span></div>
<div align="left"><span style="font-size: 12pt">可以根据id取得value，使用这个方法，你不必在意div和select list的不同。</span></div>
<div align="left"><span style="font-size: 12pt">DWRUtil.getValues()</span></div>
<div align="left"><span style="font-size: 12pt">getValues() is similar to getValue() except that the input is a Javascript object that contains name/value pairs. The names are assumed to be the IDs of HTML elements, and the values are altered to reflect the contents of those IDs. This method does not return the object in question, it alters the value that you pass to it.</span></div>
<div align="left"><span style="font-size: 12pt">这个方法和getValue()一样，只是它传入的是一个包含名字和数值的javascript对象.这个名字就是HTML元素的ID。这个方法不会返回任何对象，它只会将ID的value映射给传入的value。例：</span></div>
<div align="left"><span style="font-size: 12pt">function doGetValues() {</span></div>
<div align="left"><span style="font-size: 12pt">&nbsp; var text= "{<br />
&nbsp; div:null,<br />
&nbsp; textarea:null,<br />
&nbsp; select:null,<br />
&nbsp; text:null,<br />
&nbsp; password:null,<br />
&nbsp; formbutton:null,<br />
&nbsp; button:null<br />
}";<br />
&nbsp; var object = objectEval(text);&nbsp;&nbsp;&nbsp; //javascript对象<br />
&nbsp; DWRUtil.getValues(object);<br />
&nbsp; var reply = DWRUtil.toDescriptiveString(object, 2);&nbsp;&nbsp; //toString<br />
&nbsp; reply = reply.replace(/\n/g, "&lt;br/&gt;");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //转意<br />
&nbsp; DWRUtil.setValue("getvaluesret", reply);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //显示<br />
}</span></div>
<div align="left">&nbsp;</div>
<div align="left"><span style="font-size: 12pt">DWRUtil.onReturn</span></div>
<div align="left"><span style="font-size: 12pt">贴一段代码，暂时不理解，用onReturn和不用有什么区别</span></div>
<div align="left"><span style="font-size: 12pt">&lt;script&gt;<br />
function submitFunction()<br />
{<br />
&nbsp;&nbsp;&nbsp; $("alert").style.display = "inline";<br />
&nbsp;&nbsp;&nbsp; setTimeout("unsubmitFunction();", 1000);<br />
}<br />
function unsubmitFunction()<br />
{<br />
&nbsp;&nbsp;&nbsp; $("alert").style.display = "none";<br />
}<br />
&lt;/script&gt;</span></div>
<div align="left"><span style="font-size: 12pt">&lt;p&gt;&lt;input type="text" onkeydown="DWRUtil.onReturn(event, submitFunction)"/&gt;<br />
&lt;input type="button" onclick="submitFunction()" value="GO"/&gt;<br />
&lt;span id="alert" style="display:none; background:#FFFFDD; font-weight:bold;"&gt;submitFunction called&lt;/span&gt;<br />
&lt;/p&gt;</span></div>
<div align="left">&nbsp;</div>
<div align="left"><span style="font-size: 12pt">DWRUtil.selectRange</span></div>
<div align="left"><span style="font-size: 12pt">在一个input box里选一个范围</span></div>
<div align="left"><span style="font-size: 12pt">DWRUtil.selectRange("sel-test", $("start").value, $("end").value);</span></div>
<div align="left">&nbsp;</div>
<div align="left"><span style="font-size: 12pt">DWRUtil.setValue(id, value)</span></div>
<div align="left"><span style="font-size: 12pt">用ID找到元素，并更新value</span></div>
<div align="left"><span style="font-size: 12pt">DWRUtil.setValues()</span></div>
<div align="left"><span style="font-size: 12pt">和setValue(id,value)一样，只是它需要的参数是个javascript对象，如：</span></div>
<div align="left"><span style="font-size: 12pt">DWRUtil.setValues({<br />
&nbsp; div: "new div content",<br />
&nbsp; password: "1234567890"<br />
});</span></div>
<div align="left">&nbsp;</div>
<div align="left"><span style="font-size: 12pt">DWRUtil.toDescriptiveString</span></div>
<div align="left"><span style="font-size: 12pt">带debug信息的toString，第一个为将要debug的对象，第二个参数为处理等级。等级如下：</span></div>
<div align="left"><span style="font-size: 12pt">&#183;</span><span style="font-size: 12pt">&nbsp;0: Single line of debug 单行调试 </span></div>
<div align="left"><span style="font-size: 12pt">&#183;</span><span style="font-size: 12pt">&nbsp;1: Multi-line debug that does not dig into child objects 不分析子元素的多行调试 </span></div>
<div align="left"><span style="font-size: 12pt">&#183;</span><span style="font-size: 12pt">&nbsp;2: Multi-line debug that digs into the 2nd layer of child objects 最多分析到第二层子元素的多行调试 </span></div>
<div align="left"><span style="font-size: 12pt">&#183;</span><span style="font-size: 12pt">&nbsp;And so on. Level 2 and greater probably produce too much output. </span></div>
<div align="left">&nbsp;</div>
<div align="left"><span style="font-size: 12pt">总结：DWR不但屏蔽了许多client与server交互的重复且复杂的代码，而且还提供了一些常用的方法，一些思想还是从prototype继承而来，并有一定的改进。同时，它也考虑到了与struts、hibernate、spring的结合问题。</span></div>
<div align="left"><span style="font-size: 12pt">需要注意的是，DWR是一种把服务器端的java代码通过javascript直接从浏览器调用的方法(<a href="http://getahead.ltd.uk/dwr/"><span style="color: white">DWR</span></a><span style="color: white"> is</span>a way of calling Java code on the server directly from Javascript in the browser.)，而不是一个javascript的库(Generally speaking DWR is not a generic JavaScript library so it does not attempt to provide fill this need. However this is one of these really useful functions to have around if you are doing Ajax work.)能做到怎么多，已经很难得了。</span></div>
<div align="left"><span style="font-size: 12pt">DWR自04年11月草案提出到现在的Version 1.1 beta 3(2005-12-29)，已经更新发布了20多次了，但愿在ajax的发展大路上，能始终看见DWR的身影。</span></div>
<img src ="http://www.blogjava.net/Crying/aggbug/144820.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Crying/" target="_blank">Crying</a> 2007-09-13 13:03 <a href="http://www.blogjava.net/Crying/articles/144820.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>什么是DWR (转http://blog.sina.com.cn/s/blog_44b925cd010007p3.html)</title><link>http://www.blogjava.net/Crying/articles/142564.html</link><dc:creator>Crying</dc:creator><author>Crying</author><pubDate>Tue, 04 Sep 2007 03:24:00 GMT</pubDate><guid>http://www.blogjava.net/Crying/articles/142564.html</guid><wfw:comment>http://www.blogjava.net/Crying/comments/142564.html</wfw:comment><comments>http://www.blogjava.net/Crying/articles/142564.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Crying/comments/commentRss/142564.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Crying/services/trackbacks/142564.html</trackback:ping><description><![CDATA[<div>DWR是Direct Web Remoting 的缩写。<br />
<br />
DWR 是一个开放源码的使用 Apache 许可协议的解决方案，它包含服务器端 Java 库、一个 DWR servlet 以及 JavaScript 库。虽然 DWR 不是 Java 平台上唯一可用的 Ajax-RPC 工具包，但是它是最成熟的，而且提供了许多有用的功能。<br />
从最简单的角度来说，DWR 是一个引擎，可以把服务器端 Java 对象的方法公开给 JavaScript 代码。使用 DWR 可以有效地从应用程序代码中把 Ajax 的全部请求-响应循环消除掉。这意味着客户端代码再也不需要直接处理 XMLHttpRequest 对象或者服务器的响应。不再需要编写对象的序列化代码或者使用第三方工具才能把对象变成 XML。甚至不再需要编写 servlet 代码把 Ajax 请求调整成对 Java 域对象的调用。<br />
DWR 是作为 Web 应用程序中的 servlet 部署的。把它看作一个黑盒子，这个 servlet 有两个主要作用：首先，对于公开的每个类，DWR 动态地生成包含在 Web 页面中的 JavaScript。生成的 JavaScript 包含存根函数，代表 Java 类上的对应方法并在幕后执行 XMLHttpRequest。这些请求被发送给 DWR，这时它的第二个作用就是把请求翻译成服务器端 Java 对象上的方法调用并把方法的返回值放在 servlet 响应中发送回客户端，编码成 JavaScript。DWR 还提供了帮助执行常见的用户界面任务的 JavaScript 工具函数。</div>
<div>&nbsp;</div>
<div>
<div>util.js&nbsp; util.js包含了一些使用的方法，从而帮助你利用j avascript(可能)从服务器端更新你的web数据。</div>
<div>&nbsp;你可以在DWR之外的地方使用它，因为它并不依赖与DWR而实现。</div>
<div>&nbsp;它包含四个页面处理函数：getValue[s]()、setValue[s]()作用于除tables、lists和images以外的大多数html元素。getText()作用于select lists。</div>
<div>&nbsp;addRows()和removeAllRows()用于编辑tables。addOptions()和removeAllOptions()用于编辑lists(如：select lists、ul、ol)。</div>
<div>$()<br />
&nbsp;$函数(在j avascript中，他的名字是合法的)的思想是从prototype引进的。一般说来，$ = document.getElementById。在以后你花大量时间进行ajax编程的时候，在合适的地方使用这种格式是很有益的。</div>
<div>&nbsp;'$'通过给定的ID在当前HTML页面找到元素，如果多于一个的参数被提交，它就会返回一个包含已找到元素的数组。这个函数从prototype的library中得到的灵感，而且，它还能更好的工作在不同的浏览器中。</div>
<div>&nbsp;</div>
<div>Generating Lists</div>
<div>&nbsp;DWR的一个功能可以给一个下拉列表(select list)添加选项，只需使用DWRUtil.addOptions()。</div>
<div>&nbsp;如果你在更新列表之前，希望保留一些选项，你需要写以下一些代码：</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp; var sel = DWRUtil.getValue(id);<br />
&nbsp;&nbsp;&nbsp;&nbsp; DWRUtil.removeAllOptions(id);<br />
&nbsp;&nbsp;&nbsp;&nbsp; DWRUtil.addOptions(id, ...);<br />
&nbsp;&nbsp;&nbsp;&nbsp; DWRUtil.setValue(id, sel);</div>
<div>&nbsp;如果你想有个初始化选项，如：&#8220;please select&#8221;，你可以直接使用：</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp; DWRUtil.addOptions(id, ["Please select"]);</div>
<div>DWRUtil.addOptions 有5种调用方法：Array: DWRUtil.addOptions(selectid, array) 。selectid为目标ID,array为每一项的text。</div>
<div>Array of objects (option text = option value): DWRUtil.addOptions(selectid, data, prop) 用text和value的集合来为每一个数组元素创建一个选项，pro参数指定text和value的值。</div>
<div>Array of objects (with differing option text and value): DWRUtil.addOptions(selectid, array, valueprop, textprop) 用text和value的集合来为每一个数组元素创建一个选项，valueprop确定value，textprop确定text。</div>
<div>Object: DWRUtil.addOptions(selectid, map, reverse) 为map中每一个属性(property)创建一个选项，属性名作为选项的value，属性的value作为选项的text。这样做看起来是错的，但实际上这种做法的确是正确的。如果reverse参数被设置为true，则属性的value还是被用做选项的value。</div>
<div>Map of objects: DWRUtil.addOptions(selectid, map, valueprop, textprop) 为map中的每一个对象创建一个选项，valueprop指定选项的value，textprop指定选项的text。</div>
<div>&nbsp;</div>
<div>Generating Tables</div>
<div>DWRUtil.addRows() 从一个数组(第二个参数)取得值，创建table的每一行。从另一个数组(第三个参数)去得值，为table的每一行创建若干列。</div>
<div>&nbsp;</div>
<div>DWRUtil.getText(id)</div>
<div>可以根据id取得text的值，这个方法只能用于select list</div>
<div>DWRUtil.getValue(id)</div>
<div>可以根据id取得value，使用这个方法，你不必在意div和select list的不同。</div>
<div>DWRUtil.getValues()</div>
<div>getValues() is similar to getValue() except that the input is a Javascript object that contains name/value pairs. The names are assumed to be the IDs of HTML elements, and the values are altered to reflect the contents of those IDs. This method does not return the object in question, it alters the value that you pass to it.<br />
这个方法和getValue()一样，只是它传入的是一个包含名字和数值的j avascript对象.这个名字就是HTML元素的ID。这个方法不会返回任何对象，它只会将ID的value映射给传入的value。例：</div>
<div>function doGetValues() {&nbsp;</div>
<div>&nbsp;var text= "{&nbsp;<br />
&nbsp;div:null,<br />
&nbsp;textarea:null,<br />
&nbsp;select:null,<br />
&nbsp;text:null,<br />
&nbsp;password:null,<br />
&nbsp;formbutton:null,<br />
&nbsp;button:null<br />
}";<br />
&nbsp;var object = objectEval(text);&nbsp;&nbsp;&nbsp; //j avascript对象<br />
&nbsp;DWRUtil.getValues(object);<br />
&nbsp;var reply = DWRUtil.toDescriptiveString(object, 2);&nbsp;&nbsp; //toString<br />
&nbsp;reply = reply.replace(/n/g, "&lt;br/&gt;");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //转意<br />
&nbsp;DWRUtil.setValue("getvaluesret", reply);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //显示<br />
}</div>
<div>&nbsp;</div>
<div>DWRUtil.onReturn</div>
<div>贴一段代码，暂时不理解，用onReturn和不用有什么区别</div>
<div>&lt;script&gt;<br />
function submitFunction()<br />
{&nbsp;<br />
&nbsp;&nbsp; $("alert").style.display = "inline";<br />
&nbsp;&nbsp; setTimeout("unsubmitFunction();", 1000);<br />
}<br />
function unsubmitFunction()<br />
{&nbsp;<br />
&nbsp;&nbsp; $("alert").style.display = "none";<br />
}<br />
&lt;/script&gt;</div>
<div>&lt;p&gt;&lt;input type="text" onkeydown="DWRUtil.onReturn(event, submitFunction)"/&gt;<br />
&lt;input type="button" onclick="submitFunction()" value="GO"/&gt;<br />
&lt;span id="alert" style="display:none; background:#FFFFDD; font-weight:bold;"&gt;submitFunction called&lt;/span&gt;<br />
&lt;/p&gt;</div>
<div>&nbsp;</div>
<div>DWRUtil.selectRange</div>
<div>在一个input box里选一个范围</div>
<div>DWRUtil.selectRange("sel-test", $("start").value, $("end").value);</div>
<div>&nbsp;</div>
<div>DWRUtil.setValue(id, value)</div>
<div>用ID找到元素，并更新value</div>
<div>DWRUtil.setValues()</div>
<div>和setValue(id,value)一样，只是它需要的参数是个j avascript对象，如：</div>
<div>DWRUtil.setValues({&nbsp;<br />
&nbsp;div: "new div content",<br />
&nbsp;password: "1234567890"<br />
});</div>
<div>&nbsp;</div>
<div>DWRUtil.toDescriptiveString</div>
<div>带debug信息的toString，第一个为将要debug的对象，第二个参数为处理等级。等级如下：</div>
<div>0: Single line of debug 单行调试&nbsp;<br />
1: Multi-line debug that does not dig into child objects 不分析子元素的多行调试&nbsp;<br />
2: Multi-line debug that digs into the 2nd layer of child objects 最多分析到第二层子元素的多行调试&nbsp;<br />
And so on. Level 2 and greater probably produce too much output.&nbsp;</div>
<div>总结：DWR不但屏蔽了许多client与server交互的重复且复杂的代码，而且还提供了一些常用的方法，一些思想还是从prototype继承而来，并有一定的改进。同时，它也考虑到了与struts、hibernate、spring的结合问题。</div>
<div>需要注意的是，DWR是一种把服务器端的java代码通过j avascript直接从浏览器调用的方法(DWR is a way of calling Java code on the server directly from Javascript in the browser.)，而不是一个j avascript的库(Generally speaking DWR is not a generic JavaScript library so it does not attempt to provide fill this need. However this is one of these really useful functions to have around if you are doing Ajax work.)能做到怎么多，已经很难得了。</div>
<div>DWR自04年11月草案提出到现在的Version 1.1 beta 3(2005-12-29)，已经更新发布了20多次了，但愿在ajax的发展大路上，能始终看见DWR的身影。</div>
</div>
<img src ="http://www.blogjava.net/Crying/aggbug/142564.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Crying/" target="_blank">Crying</a> 2007-09-04 11:24 <a href="http://www.blogjava.net/Crying/articles/142564.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>