﻿<?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-liubijin-随笔分类-DWR</title><link>http://www.blogjava.net/liubijin/category/44919.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 04 May 2010 07:56:02 GMT</lastBuildDate><pubDate>Tue, 04 May 2010 07:56:02 GMT</pubDate><ttl>60</ttl><item><title>DWR各种 调用方法 </title><link>http://www.blogjava.net/liubijin/archive/2010/05/04/320026.html</link><dc:creator>無所謂</dc:creator><author>無所謂</author><pubDate>Tue, 04 May 2010 04:12:00 GMT</pubDate><guid>http://www.blogjava.net/liubijin/archive/2010/05/04/320026.html</guid><wfw:comment>http://www.blogjava.net/liubijin/comments/320026.html</wfw:comment><comments>http://www.blogjava.net/liubijin/archive/2010/05/04/320026.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liubijin/comments/commentRss/320026.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liubijin/services/trackbacks/320026.html</trackback:ping><description><![CDATA[<div><font color="#0000ff"><strong>1、调用没有返回值和参数的JAVA方法</strong></font></div>
<div><br />
<font color="#ff00ff">1.1、dwr.xml的配置</font><br />
&lt;dwr&gt;<br />
&lt;allow&gt;<br />
&lt;create creator="new" javascript="testClass" &gt;<br />
&lt;param name="class" value="/com.dwr.TestClass" /&gt;<br />
&lt;include method="testMethod1"/&gt;<br />
&lt;/create&gt;<br />
&lt;/allow&gt;<br />
&lt;/dwr&gt;<br />
&lt;allow&gt;标签中包括可以暴露给javascript访问的东西。<br />
&lt;create&gt;标签中指定javascript中可以访问的java类，并定义DWR应当如何获得要进行远程的类的实例。creator= "new"属性指定java类实例的生成方式，new意味着DWR应当调用类的默认构造函数来获得实例，其他的还有spring方式，通过与IOC容器 Spring进行集成来获得实例等等。javascript=" testClass "属性指定javascript代码访问对象时使用的名称。<br />
&lt;param&gt;标签指定要公开给javascript的java类名。<br />
&lt;include&gt;标签指定要公开给javascript的方法。不指定的话就公开所有方法。<br />
&lt;exclude&gt;标签指定要防止被访问的方法。<br />
<font color="#ff00ff">1.2、javascript中调用</font><br />
首先，引入javascript脚本<br />
&lt;script src='dwr/interface/ testClass.js'&gt;&lt;/script&gt;<br />
&lt;script src="/dwr/engine.js"&gt;&lt;/script&gt;<br />
&lt;script src="/dwr/util.js"&gt;&lt;/script&gt;<br />
其中TestClass.js是dwr根据配置文件自动生成的，engine.js和util.js是dwr自带的脚本文件。<br />
其次，编写调用java方法的javascript函数<br />
Function callTestMethod1(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; testClass.testMethod1();<br />
}<br />
<font color="#0000ff"><strong>2、调用有简单返回值的java方法</strong></font></div>
<div><br />
<font color="#ff00ff">2.1、dwr.xml的配置</font><br />
配置同1.1<br />
&lt;dwr&gt;<br />
&lt;allow&gt;<br />
&lt;create creator="new" javascript="testClass" &gt;<br />
&lt;param name="class" value="/com.dwr.TestClass" /&gt;<br />
&lt;include method="testMethod2"/&gt;<br />
&lt;/create&gt;<br />
&lt;/allow&gt;<br />
&lt;/dwr&gt;<br />
2.2、javascript中调用<br />
首先，引入javascript脚本<br />
其次，编写调用java方法的javascript函数和接收返回值的回调函数<br />
Function callTestMethod2(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; testClass.testMethod2(callBackFortestMethod2);<br />
}<br />
Function callBackFortestMethod2(data){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //其中date接收方法的返回值<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //可以在这里对返回值进行处理和显示等等<br />
alert("the return value is " + data);<br />
}<br />
其中callBackFortestMethod2是接收返回值的回调函数</div>
<div><br />
<font color="#0000ff"><strong>3、调用有简单参数的java方法</strong></font></div>
<div><br />
<font color="#ff00ff">3.1、dwr.xml的配置</font><br />
配置同1.1<br />
&lt;dwr&gt;<br />
&lt;allow&gt;<br />
&lt;create creator="new" javascript="testClass" &gt;<br />
&lt;param name="class" value="/com.dwr.TestClass" /&gt;<br />
&lt;include method="testMethod3"/&gt;<br />
&lt;/create&gt;<br />
&lt;/allow&gt;<br />
&lt;/dwr&gt;<br />
<font color="#ff00ff">3.2、javascript中调用</font><br />
首先，引入javascript脚本<br />
其次，编写调用java方法的javascript函数<br />
Function callTestMethod3(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //定义要传到java方法中的参数<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var data;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //构造参数<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; data = &#8220;test String&#8221;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; testClass.testMethod3(data);<br />
}</div>
<div><br />
<font color="#0000ff"><strong>4、调用返回JavaBean的java方法</strong></font><br />
<font color="#ff00ff">4.1、dwr.xml的配置</font><br />
&lt;dwr&gt;<br />
&lt;allow&gt;<br />
&lt;create creator="new" javascript="testClass" &gt;<br />
&lt;param name="class" value="/com.dwr.TestClass" /&gt;<br />
&lt;include method="testMethod4"/&gt;<br />
&lt;/create&gt;<br />
&lt;convert converter="bean" match=""com.dwr.TestBean"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param name="include" value="username,password" /&gt;<br />
&lt;/convert&gt;<br />
&lt;/allow&gt;<br />
&lt;/dwr&gt;<br />
&lt;creator&gt;标签负责公开用于Web远程的类和类的方法，&lt;convertor&gt;标签则负责这些方法的参数和返回类型。 convert元素的作用是告诉DWR在服务器端Java 对象表示和序列化的JavaScript之间如何转换数据类型。DWR自动地在Java和JavaScript表示之间调整简单数据类型。这些类型包括 Java原生类型和它们各自的封装类表示，还有String、Date、数组和集合类型。DWR也能把JavaBean转换成JavaScript 表示，但是出于安全性的原因，要求显式的配置，&lt;convertor&gt;标签就是完成此功能的。converter="bean"属性指定转换的方式采用JavaBean命名规范，match=""com.dwr.TestBean"属性指定要转换的javabean名称，&lt; param&gt;标签指定要转换的JavaBean属性。<br />
<font color="#ff00ff">4.2、javascript中调用</font><br />
首先，引入javascript脚本<br />
其次，编写调用java方法的javascript函数和接收返回值的回调函数<br />
Function callTestMethod4(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; testClass.testMethod4(callBackFortestMethod4);<br />
}<br />
Function callBackFortestMethod4(data){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //其中date接收方法的返回值<br />
//对于JavaBean返回值，有两种方式处理<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //不知道属性名称时，使用如下方法<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(var property in data){ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert("property:"+property);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert(property+":"+data[property]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
//知道属性名称时，使用如下方法<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert(data.username);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert(data.password);<br />
}<br />
其中callBackFortestMethod4是接收返回值的回调函数</div>
<div><br />
<font color="#0000ff"><strong>5、调用有JavaBean参数的java方法</strong></font><br />
<font color="#ff00ff">5.1、dwr.xml的配置<br />
</font>配置同4.1<br />
&lt;dwr&gt;<br />
&lt;allow&gt;<br />
&lt;create creator="new" javascript="testClass" &gt;<br />
&lt;param name="class" value="/com.dwr.TestClass" /&gt;<br />
&lt;include method="testMethod5"/&gt;<br />
&lt;/create&gt;<br />
&lt;convert converter="bean" match="com.dwr.TestBean"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param name="include" value="username,password" /&gt;<br />
&lt;/convert&gt;<br />
&lt;/allow&gt;<br />
&lt;/dwr&gt;<br />
<font color="#ff00ff">5.2、javascript中调用</font><br />
首先，引入javascript脚本<br />
其次，编写调用java方法的javascript函数<br />
Function callTestMethod5(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //定义要传到java方法中的参数<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var data;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //构造参数，date实际上是一个object<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; data = { username:"user", password:"password" }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; testClass.testMethod5(data);<br />
}</div>
<div><br />
<font color="#0000ff"><strong>6、调用返回List、Set或者Map的java方法</strong></font><br />
<font color="#ff00ff">6.1、dwr.xml的配置</font><br />
配置同4.1<br />
&lt;dwr&gt;<br />
&lt;allow&gt;<br />
&lt;create creator="new" javascript="testClass" &gt;<br />
&lt;param name="class" value="/com.dwr.TestClass" /&gt;<br />
&lt;include method="testMethod6"/&gt;<br />
&lt;/create&gt;<br />
&lt;convert converter="bean" match="com.dwr.TestBean"&gt;<br />
&lt;param name="include" value="username,password" /&gt;<br />
&lt;/convert&gt;<br />
&lt;/allow&gt;<br />
&lt;/dwr&gt;<br />
注意：如果List、Set或者Map中的元素均为简单类型（包括其封装类）或String、Date、数组和集合类型，则不需要&lt;convert&gt;标签。<br />
<font color="#ff00ff">6.2、javascript中调用(以返回List为例，List的元素为TestBean)<br />
</font>首先，引入javascript脚本<br />
其次，编写调用java方法的javascript函数和接收返回值的回调函数<br />
Function callTestMethod6(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; testClass.testMethod6(callBackFortestMethod6);<br />
}<br />
Function callBackFortestMethod6(data){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //其中date接收方法的返回值<br />
//对于JavaBean返回值，有两种方式处理<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //不知道属性名称时，使用如下方法<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(var i=0;i&lt;data.length;i++){<br />
for(var property in data){ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert("property:"+property);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert(property+":"+data[property]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
}<br />
//知道属性名称时，使用如下方法<br />
for(var i=0;i&lt;data.length;i++){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert(data.username);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert(data.password);<br />
}<br />
}</div>
<div><br />
<font color="#0000ff"><strong>7、调用有List、Set或者Map参数的java方法</strong></font></div>
<div><br />
<font color="#ff00ff">7.1、dwr.xml的配置</font><br />
&lt;dwr&gt;<br />
&lt;allow&gt;<br />
&lt;create creator="new" javascript="testClass" &gt;<br />
&lt;param name="class" value="/com.dwr.TestClass" /&gt;<br />
&lt;include method="testMethod7"/&gt;<br />
&lt;/create&gt;<br />
&lt;convert converter="bean" match="com.dwr.TestBean"&gt;<br />
&lt;param name="include" value="username,password" /&gt;<br />
&lt;/convert&gt;<br />
&lt;/allow&gt;<br />
&lt;signatures&gt;<br />
&lt;![CDATA[ <br />
import java.util.List; <br />
import com.dwr.TestClass; <br />
import com.dwr.TestBean; <br />
TestClass.testMethod7(List&lt;TestBean&gt;); <br />
]]&gt;<br />
&lt;/signatures&gt;<br />
&lt;/dwr&gt;<br />
&lt;signatures&gt;标签是用来声明java方法中List、Set或者Map参数所包含的确切类，以便java代码作出判断。<br />
<font color="#ff00ff">7.2、javascript中调用(以返回List为例，List的元素为TestBean)<br />
</font>首先，引入javascript脚本<br />
其次，编写调用java方法的javascript函数<br />
Function callTestMethod7(){<br />
//定义要传到java方法中的参数<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var data;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //构造参数，date实际上是一个object数组，即数组的每个元素均为object<br />
data = [<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; username:"user1", <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; password:"password2"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; },<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; username:"user2",<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; password:" password2"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; testClass.testMethod7(data);<br />
}<br />
注意：<br />
<font color="#006600">1、对于第6种情况，如果java方法的返回值为Map，则在接收该返回值的javascript回调函数中如下处理：<br />
</font>function callBackFortestMethod(data){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //其中date接收方法的返回值<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(var property in data){ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var bean = data[property];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert(bean.username);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert(bean.password);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
}<br />
<font color="#006600">2、对于第7种情况，如果java的方法的参数为Map（假设其key为String，value为TestBean），则在调用该方法的javascript函数中用如下方法构造要传递的参数：<br />
</font>function callTestMethod (){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //定义要传到java方法中的参数<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var data;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //构造参数，date实际上是一个object，其属性名为Map的key，属性值为Map的value<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; data = {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "key1":{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; username:"user1", <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; password:"password2"<br />
&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "key2":{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; username:"user2",<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; password:" password2"<br />
&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; };<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; testClass.testMethod(data);<br />
}<br />
并且在dwr.xml中增加如下的配置段<br />
&lt;signatures&gt;<br />
&lt;![CDATA[ <br />
import java.util.List; <br />
import com.dwr.TestClass; <br />
import com.dwr.TestBean; <br />
TestClass.testMethod7(Map&lt;String,TestBean&gt;); <br />
]]&gt;<br />
&lt;/signatures&gt;<br />
<font color="#003300"><font color="#009900">3、由以上可以发现，对于java方法的返回值为List(Set)的情况，DWR将其转化为Object数组，传递个javascript；对于java方法的返回值为Map 的情况，DWR将其转化为一个Object，其中Object的属性为原Map的key值，属性值为原Map相应的value值。</font><br />
</font><font color="#993300">4、如果java方法的参数为List(Set)和Map的情况，javascript中也要根据3种所说，构造相应的javascript数据来传递到java中。 </font></div>
<div></div>
<div>====================================================================</div>
<div>
<h1><a name="ScriptingIntroduction" -ScriptingIntroduction></a><font size="2">Scripting Introduction</font></h1>
<div>DWR根据dwr.xml生成和Java代码类似的Javascript代码。</div>
<div>相对而言Java同步调用，创建与Java代码匹配的Ajax远程调用接口的最大挑战来至与实现Ajax的异步调用特性。</div>
<div>DWR通过引入回调函数来解决这个问题，当结果被返回时，DWR会调用这个函数。</div>
<div>有两种推荐的方式来使用DWR实现远程方法调用。可以通过把回调函数放在参数列表里，也可以把回调函数放到元数据对象里。</div>
<div>当然也可以把回调函数做为第一个参数，但是不建议使用这种方法。因为这种方法在处理<a title="Accessing" href="http://wiki.javascud.org/display/dwrcn/Accessing+Servlet+Objects"  Objects? Servlet><font color="#000000">自动处理http对象</font></a>时(查看"Alternative Method")上会有问题。这个方法主要是为向下兼容而存在的。</div>
<h2><a name="ScriptingIntroduction" -简单的回调函数></a><font size="2">简单的回调函数</font></h2>
<div>假设你有一个这样的Java方法：</div>
<div>
<div>
<pre><span>public</span> class Remote {    <span>public</span> <span>String</span> getData(<span>int</span> index) { ... }}</pre>
</div>
</div>
<div>我们可以在Javascript中这样使用：</div>
<div>
<div>
<pre>&lt;script type=<span>"text/javascript"</span>    src=<span>"[WEBAPP]/dwr/interface/Remote.js"</span>&gt; <span>&lt;/script&gt;</span>&lt;script type=<span>"text/javascript"</span>    src=<span>"[WEBAPP]/dwr/engine.js"</span>&gt; <span>&lt;/script&gt;</span>...function handleGetData(str) {  alert(str);}Remote.getData(42, handleGetData);</pre>
</div>
</div>
<div>42是Java方法getData()的一个参数。</div>
<div>此外你也可以使用这种减缩格式：</div>
<div>
<div>
<pre>Remote.getData(42, function(str) { alert(str); });</pre>
</div>
</div>
<h2><a name="ScriptingIntroduction" -调用元数据对象(MetaData)></a><font size="2">调用元数据对象(Meta-Data)</font></h2>
<div>另外一种语法时使用"调用元数据对象"来指定回调函数和其他的选项。上面的例子可以写成这样：</div>
<div>
<div>
<pre>Remote.getData(42, {  callback:function(str) { alert(str); }});</pre>
</div>
</div>
<div>这种方法有很多优点：易于阅读，更重要的指定额外的调用选项。</div>
<h3><a name="ScriptingIntroduction" -超时和错误处理></a><font size="2">超时和错误处理</font></h3>
<div>在回调函数的元数据中你可以指定超时和错误的处理方式。例如：</div>
<div>
<div>
<pre>Remote.getData(42, {  callback:function(str) { alert(str); },  timeout:5000,  errorHandler:function(message) { alert(<span>"Oops: "</span> + message); }});</pre>
</div>
</div>
<h2><a name="ScriptingIntroduction" -查找回调函数></a><font size="2">查找回调函数</font></h2>
<div>有些情况下我们很难区分各种回调选项(记住，Javascript是不支持函数重载的)。例如：</div>
<div>
<div>
<pre>Remote.method({ timeout:3 }, { errorHandler:somefunc });</pre>
</div>
</div>
<div>这两个参数之一是bean的参数，另一个是元数据对象，但是我们不能清楚的告诉DWR哪个是哪个。为了可以跨浏览器，我们假定null == undefined。 所以当前的情况，规则是：</div>
<ul>
    <li>如果第一个或最后一个是一个函数，那么它就是回调函数，没有元数据对象，并且其他参数都是Java的方法参数。
    <li>另外，如果最后一个参数是一个对象，这个对象中有一个callback成员，并且它是个函数，那么这个对象就是元数据对象，其他的都是Java方法参数。
    <li>另外，如果第一个参数是 <em>null</em> ，我们就假设没有回调函数，并且其他的都是Java方法参数。尽管如此，我们会检查最后一个参数是不是null，如果是就发出警告。
    <li>最后如果最后一个参数是null，那么就没有callback函数。
    <li>另外，发出错误信号是个糟糕的请求格式。 </li>
</ul>
<h2><a name="ScriptingIntroduction" -创造一个与Java对象匹配的Javascript对象></a><font size="2">创造一个与Java对象匹配的Javascript对象</font></h2>
<div>假设你有这样的Java方法：</div>
<div>
<div>
<pre><span>public</span> class Remote {  <span>public</span> void setPerson(Person p) {    <span>this</span>.person = p;  }}</pre>
</div>
</div>
<div>Person对象的结构是这样的：</div>
<div>
<div>
<pre><span>public</span> Person {  <span>private</span> <span>String</span> name;  <span>private</span> <span>int</span> age;  <span>private</span> Date[] appointments;  <span>// getters and setters ...</span>}</pre>
</div>
</div>
<div>那么你可以在Javascript中这样写：</div>
<div>
<div>
<pre><span>var</span> p = {  name:"Fred Bloggs",  age:42,  appointments:[ <span>new</span> Date(), <span>new</span> Date("1 Jan 2008") ]};Remote.setPerson(p);</pre>
</div>
</div>
<div>在Javascript没有出现的字段，在Java中就不会被设置。</div>
<div>因为setter都是返回'void'，我们就不需要使用callback函数了。如果你想要一个返回void的服务端方法的完整版，你也可以加上callback函数。很明显DWR不会向它传递任何参数。</div>
</div>
<img src ="http://www.blogjava.net/liubijin/aggbug/320026.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liubijin/" target="_blank">無所謂</a> 2010-05-04 12:12 <a href="http://www.blogjava.net/liubijin/archive/2010/05/04/320026.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DWR util.js 学习笔记 </title><link>http://www.blogjava.net/liubijin/archive/2010/05/04/320023.html</link><dc:creator>無所謂</dc:creator><author>無所謂</author><pubDate>Tue, 04 May 2010 03:51:00 GMT</pubDate><guid>http://www.blogjava.net/liubijin/archive/2010/05/04/320023.html</guid><wfw:comment>http://www.blogjava.net/liubijin/comments/320023.html</wfw:comment><comments>http://www.blogjava.net/liubijin/archive/2010/05/04/320023.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liubijin/comments/commentRss/320023.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liubijin/services/trackbacks/320023.html</trackback:ping><description><![CDATA[<p>util.js包含一些有用的函数function,用于在客户端页面调用，它可以和dwr分开，独立营用于你的系统中。 <br />
<br />
这些功能函数在下面这个网址都有示例,这里只是把他们用中文解释,方便查找. <br />
http://getahead.ltd.uk/dwr/browser/util <br />
<br />
</p>
<p>主要功能如下： <br />
1、$() 获得页面参数值 <br />
2、addOptions and removeAllOptions 初始化下拉框 <br />
3、addRows and removeAllRows 填充表格 <br />
4、getText&nbsp; 取得text属性值 <br />
5、getValue 取得form表单值 <br />
6、getValues 取得form多个值 <br />
7、onReturn <br />
8、selectRange <br />
9、setValue <br />
10、setValues <br />
11、toDescriptiveString <br />
12、useLoadingMessage <br />
13、Submission box </p>
<p><span style="color: red"><strong><br />
1。$();</strong> </span><br />
功能 : 相当于 document.getElementById(id); <br />
参数 : id 或 name 属性值 ; <br />
例 : <br />
&lt;script&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Var ele=$(txt_test); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Var str=DWRUtil.toDescriptiveString(ele,1) <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DWRUtil.debug(str); <br />
&lt;/script&gt; </p>
<p><span style="color: red"><strong>2。DWRUtil.getValue();</strong> </span><br />
功能 : 获得指定元素 value 值 <br />
参数 : id 或 name 属性值 ; <br />
注意 : 该函数只能用于有 value 属性的元素 <br />
例 : <br />
&lt;script&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var val=DWRUtil.getValue(&#8220;txt_test&#8221;); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DWRUtil.debug(val); <br />
&lt;/script&gt; </p>
<p><span style="color: red"><strong>3。 DWRUtil.getValues(); <br />
</strong></span>功能 : 获得一组指定元素的 value 值 ; <br />
参数 :id 或 name 构成的数组对象 <br />
例 : <br />
&lt;script&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Var arr_=DWRUtil.getValues({&#8220;txt_name&#8221;:null,&#8221;txt_pswd&#8221;:null}); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Var str=DWRUtil.toDescriptiveString(arr,1) <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DWRUtil.debug(str); <br />
&lt;/script&gt; </p>
<p><span style="color: red">4<strong>。</strong></span><span style="color: red"><strong>DWRUtil.setValue(); </strong></span><br />
功能 : 设置指定元素的 value 值 <br />
参数 : id 或 name 属性值 <br />
例 :<br />
&lt;script&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DWRUtil.setValue(&#8220;txt_test&#8221;,&#8221;wiley&#8221;); <br />
&lt;/script&gt; </p>
<p><span style="color: red"><strong>5。 DWRUtil.setValues(); </strong></span><br />
功能 : 设置一组指定元素的值 <br />
参数 : id 或 name 构成的数组对象 <br />
例 :<br />
&lt;script&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DWRUtil.setValues({&#8220;txt_name&#8221;:&#8221;wiley&#8221;,&#8221;txt_pswd&#8221;:&#8221;wiley&#8221;}); <br />
&lt;/script&gt; </p>
<p><span style="color: red"><strong>6。 DWRUtil.getText(); </strong></span><br />
功能 : 获得 select 元素的文本值 <br />
参数 : id 或 name 属性值 <br />
例 : <br />
&lt;script&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Var txt=DWRUtil.getText (&#8220;sel_test&#8221;); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Var val=DWRUtil.getValue(&#8220;sel_test&#8221;); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DWRUtil.debug(&#8220;Text:&#8221;+txt+&#8221;\tValue:&#8221;+val); <br />
&lt;/script&gt; </p>
<p><span style="color: red"><strong>7。DWRUtil.addRows(); </strong></span><br />
功能 : 指定表格添加行 <br />
格式 :DWRUtil.addRows(id,items, functions); <br />
参数 : <br />
第一个参数 :table 或 tbody 的 id 属性值 <br />
第二个参数 : 数组或链表 ( 可能用词不是很适合 ) <br />
第三个参数 : 函数链表 <br />
例: <br />
&lt;script&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Var arr_={&#8220;wiley&#8217;s blog&#8221;,&#8221;wiley 中国 &#8221;}; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DWRUtil.addRows(&#8220;tby_test&#8221;,arr_,[function(arr_){return arr_}]); <br />
&lt;/script&gt; </p>
<p>&lt;script&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Var items=[{&#8220;name&#8221;:&#8221;wiley 中国 &#8221;,&#8221;add&#8221;:&#8221;wiley-cn.com&#8221;}]; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DWRUtil.addRows(&#8220;tby_test&#8221;,items,[function(item){return item.name}, function(item){return item.add}]); <br />
&lt;/script&gt; </p>
<p><span style="color: red"><strong>8。DWRUtil.romoveAllRows(); </strong></span><br />
功能 : 删除指定表格行 <br />
参数 :table 或 tbody 的 id 属性值 <br />
&lt;script&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DWRUtil.romoveAllRows(&#8220;tby_test&#8221;);// 每次添加前将原有数据行删除 , 防止数据重叠 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Var items=[{&#8220;name&#8221;:&#8221;wiley 中国 &#8221;,&#8221;add&#8221;:&#8221;wiley-cn.com&#8221;}]; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DWRUtil.addRows(&#8220;tby_test&#8221;,items,[function(item){return item.name}, function(item){return item.add}]); <br />
&lt;/script&gt; </p>
<p><strong><span style="color: red"><strong>9。DWRUtil.addOptions();</strong> </span></strong><br />
功能 : 添加 select 元素的 option 子元素 <br />
格式 :DWRUtil.addOption(id,items) 或 DWRUtil.addOption(id,items,valueProp,textProp); <br />
参数 : <br />
第一个参数 :select 的 id 或 name 属性值 <br />
第二个参数 : 数组或链表 ( 填充数据 ) <br />
第三、四个参数 : 链表节点的属性 , 第三个填充 value 值，第四个填充 text 值 <br />
&nbsp;&nbsp;&nbsp; &lt;script&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Var arr_={&#8220;wiley&#8221;,&#8221;wiley 中国 &#8221;}; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DWRUtil.addRows(&#8220;sel_test&#8221;,arr_);// 此时 value 与 text 值相同 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DWRUtil.romoveAllOptions(&#8220;sel_test&#8221;); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Var items=[{&#8220;name&#8221;:&#8221;wiley 中国 &#8221;,&#8221;add&#8221;:&#8221;wiley-cn.com&#8221;}]; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DWRUtil.addRows(&#8220;sel_test&#8221;,&#8221;add&#8221;,&#8221;name&#8221;);// 此时 value 与 text 不相同 <br />
&lt;/script&gt; </p>
<p><span style="color: red"><strong>10。DWRUtil.romoveAllOptions(); </strong></span><br />
功能 : 删除指定 select 元素的 option 子元素 <br />
参数 :select 元素的 id 或 name 属性值 <br />
例 : 前面例子有用到 </p>
<p><span style="color: red"><strong>11。DWRUtil.debug();</strong></span> <br />
功能 : 等价于 alert() <br />
例 : 前面例子有用到 </p>
<p><span style="color: red"><strong>12。DWRUtil.toDescriptiveString(); </strong></span><br />
功能：将对象序列化成字符串 , 主要用于调试 <br />
带debug信息的toString，第一个为将要debug的对象，第二个参数为处理等级。等级如下： </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 0: Single line of debug 单行调试&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; 1: Multi-line debug that does not dig into child objects 不分析子元素的多行调试&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; 2: Multi-line debug that digs into the 2nd layer of child objects 最多分析到第二层子元素的多行调试 </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; &lt;input type="text" id="text"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; DWRUtil.toDescrīptiveString("text",0);</p>
<p><span style="color: red"><strong>13。DWRUtil.useLoadingMessage();</strong></span><br />
&nbsp;&nbsp;&nbsp; 功能：当发出ajax请求后,页面显示的提示等待信息;<br />
&nbsp;&nbsp;&nbsp; 例：<br />
&nbsp;&nbsp;&nbsp; function searchUser(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var loadinfo = "loading....."<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; regUser.queryAllUser(userList);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DWRUtil.useLoadingMessage(loadinfo);&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;</p>
<img src ="http://www.blogjava.net/liubijin/aggbug/320023.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liubijin/" target="_blank">無所謂</a> 2010-05-04 11:51 <a href="http://www.blogjava.net/liubijin/archive/2010/05/04/320023.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> 对于DWR的简单总结 </title><link>http://www.blogjava.net/liubijin/archive/2010/05/04/320021.html</link><dc:creator>無所謂</dc:creator><author>無所謂</author><pubDate>Tue, 04 May 2010 03:39:00 GMT</pubDate><guid>http://www.blogjava.net/liubijin/archive/2010/05/04/320021.html</guid><wfw:comment>http://www.blogjava.net/liubijin/comments/320021.html</wfw:comment><comments>http://www.blogjava.net/liubijin/archive/2010/05/04/320021.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liubijin/comments/commentRss/320021.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liubijin/services/trackbacks/320021.html</trackback:ping><description><![CDATA[<p>这两天学了下DWR，现在总结一下。<br />
DWR是方便使用AJAX连接JS和JAVA的的一个框架,把服务器端 Java 对象的方法公开给 JavaScript 代码。<br />
如果是用dwr2.0的jar包，还需要同时导入log4j.jar和commons-loggin.jar,勿忘!!<br />
<br />
web.xml和dwr.xml放在WEB-INF下!<br />
-----------------------------<br />
配置web.xml:WEB工程启动的时候会在这个里面找到具体所用到的类的路径，由此进行加载</p>
<p>&nbsp;</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">servlet</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">servlet-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;dwr-invoke&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">servlet-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">servlet-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;uk.ltd.getahead.dwr.DWRServlet&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">servlet</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">init-param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;//这个是调试用，如果正式发布请该为false，不过听说2.0就默认为true了<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;debug&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param-value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param-value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;true&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param-value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">init-param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">init-param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;//这个是DWR2.0必须的,不然会报java.lang.IllegalArgumentException<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;classes&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param-value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param-value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;java.lang.Object&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param-value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">servlet</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">servlet-mapping</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">servlet-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;dwr-invoke&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">servlet-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">url-pattern</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;/dwr/*&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">url-pattern</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">servlet-mapping</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span></div>
<p>&nbsp;</p>
<p>-----------------------------<br />
配置dwr.xml: dwr.xml的作用是让你告诉DWR哪些class中的哪些方法你需要暴露给前台使用，当DWR启动时候根据dwr.xml这个文件把java类中的方法转成js中可用的类中方法，使前台可以使用。</p>
<p>注:以下是不全按dwr2.0写的，如果用的是DWR2.0，那java里暴露类(蓝字显示)不能写在&lt;create&gt;属性里，应删除后写在&lt;include method="" /&gt;前，&lt;param name="class" value="***java里暴露的class,必须写完整路径***" /&gt;。</p>
<p><br />
&nbsp;</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">dwr</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">allow</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">create&nbsp;</span><span style="color: #ff0000">creator</span><span style="color: #0000ff">="new"</span><span style="color: #ff0000">&nbsp;javascript</span><span style="color: #0000ff">="***js调用的class***"</span><span style="color: #ff0000">&nbsp;class</span><span style="color: #0000ff">="***java里暴露的class,必须写完整路径***"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">include&nbsp;</span><span style="color: #ff0000">method</span><span style="color: #0000ff">="***java暴露类里要公开的方法，如果不写默认全部公开***"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">create</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">allow</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">dwr</span><span style="color: #0000ff">&gt;</span></div>
<p>&nbsp;</p>
<p>-----------------------------<br />
在html或js页面中加入<br />
</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #000000">&lt;</span><span style="color: #000000">script&nbsp;src</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">&lt;%=basePath&nbsp;%&gt;dwr/interface/java里暴露的class</span><span style="color: #000000">"</span><span style="color: #000000">&gt;&lt;/</span><span style="color: #000000">script</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">切记不能&lt;script&nbsp;***&nbsp;/&gt;这样写</span><span style="color: #008000"><br />
</span><span style="color: #000000">&lt;</span><span style="color: #000000">script&nbsp;src</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">&lt;%=basePath&nbsp;%&gt;dwr/engine.js</span><span style="color: #000000">"</span><span style="color: #000000">&gt;&lt;/</span><span style="color: #000000">script</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">Dwr的脚本驱动Js,以上两个必写</span><span style="color: #008000"><br />
</span><span style="color: #000000">&lt;</span><span style="color: #000000">script&nbsp;src</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">&lt;%=basePath&nbsp;%&gt;dwr/util.js</span><span style="color: #000000">"</span><span style="color: #000000">&gt;&lt;/</span><span style="color: #000000">script</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">这是个工具包，可以不调用</span><span style="color: #008000"><br />
</span><span style="color: #000000">&lt;</span><span style="color: #000000">script&nbsp;type</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">text/javascript</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;doMethod()<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">调用方法:若公开的类是AAA,公开的AAA里的方法是bbb([参数]);</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AAA.bbb([参数],callBack);</span><span style="color: #008000">//</span><span style="color: #008000">回调函数callBack()</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;callBack(data)</span><span style="color: #008000">//</span><span style="color: #008000">data是后台返回的值，名字自取，也可省略，因为JS允许</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;处理方法&#8230;&#8230;;</span><span style="color: #008000">//</span><span style="color: #008000">如果callBack()没有写明返回值，可以通过argments[0]拿到</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #000000">&lt;/</span><span style="color: #000000">script</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span></div>
<p>&nbsp;</p>
<p><br />
其实我们调用AAA.bbb([参数],callBack);就是做了以下这一步：<br />
(下面红字是包装好的，不在前台，所以即使你没有创建html或者jsp来调用，也可以通过localhost:8080/工程名/dwr 来看到你暴露的java类进行测试)<br />
&nbsp;</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #000000">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;AAA()&nbsp;{&nbsp;};<br />
&nbsp;&nbsp;&nbsp;&nbsp;AAA.bbb&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">([参数],&nbsp;callback)&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DWREngine._execute('</span><span style="color: #000000">/</span><span style="color: #000000">dwr</span><span style="color: #000000">/</span><span style="color: #000000">dwr',&nbsp;'AAA',&nbsp;'bbb',&nbsp;[参数],&nbsp;callback);&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>
<p>&nbsp;</p>
<p>通过在dwr.xml暴露的方法得到js里的方法，当我们调用AAA.bbb时候再通过/dwr/dwr转到DWRServlet中去用JAVA里的AAA.bbb方法，然后返回值到callback中(中间经过dwr.xml的convert)</p>
<p><br />
----------------------------<br />
上面对dwr的工作大致分析了下，现在对于参数类型的不同，对dwr.xml也要进行修正。</p>
<p>DWR自动地在Java和JavaScript表示之间调整简单数据类型,这些类型包括Java原生类型和它们各自的封装类表示，还有String、Date、数组和集合类型。但如果参数类型非简单数据类型，则要通过转换。</p>
<p>调用返回JavaBean的java方法</p>
<p><br />
在dwr.xml的&lt;allow&gt;标签中加入</p>
<p>&nbsp;</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">convert&nbsp;</span><span style="color: #ff0000">converter</span><span style="color: #0000ff">="bean"</span><span style="color: #ff0000">&nbsp;match</span><span style="color: #0000ff">="***一般来说是javabean***"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;//int,String,list等不需要显式的转换就可以被js拿到<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="include"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="***javabean中的属性，用','隔开***"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000">&nbsp;&nbsp;//这句可以不写<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">convert</span><span style="color: #0000ff">&gt;</span></div>
<p>&nbsp;</p>
<p>&lt;creator&gt;标签负责公开用于Web远程的类和类的方法，&lt;convertor&gt;标签则负责这些方法的参数和返回类型。convert元素的作用是告诉DWR在服务器端Java 对象表示和序列化的JavaScript之间如何转换数据类型。</p>
<p>这样在js端回调函数直接拿到的data就是一个javabean,可以直接通过data.xxx拿到bean的属性xxx。</p>
<p>&nbsp;</p>
<p>调用有JavaBean参数的java方法</p>
<p><br />
dwr.xml配置同上。</p>
<p>在JS端，把要传入的参数写成javabean方式，例：要传入一个名为student的javabean,参数有name,password,则<br />
var stu = {name:"zhangsan",password:"zspassword"}; //这是json的表示方法<br />
AAA.bbb(stu,callBack);</p>
<p>&nbsp;</p>
<p>调用返回List、Set或者Map的java方法</p>
<p><br />
dwr.xml配置同上。如果Collection里的数据是简单数据类型，则可不需要写&lt;convert&gt;</p>
<p>在JS端，以List，里面数据是bean为例，data是一个List型，只要用for循环就可以依次拿到数据。<br />
遍历方法1:<br />
</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #0000ff">for</span><span style="color: #000000">(var&nbsp;i</span><span style="color: #000000">=</span><span style="color: #000000">0</span><span style="color: #000000">;i</span><span style="color: #000000">&lt;</span><span style="color: #000000">data.length;i</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">/*</span><span style="color: #008000">对于java方法的返回值为List(Set)的情况，DWR将其转&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;化为Object数组，传递个javascript</span><span style="color: #008000">*/</span><span style="color: #000000"><br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;alert(data[i].name</span><span style="color: #000000">+</span><span style="color: #000000">"</span><span style="color: #000000">:</span><span style="color: #000000">"</span><span style="color: #000000">+</span><span style="color: #000000">data[i].password);<br />
}</span></div>
<p>&nbsp;</p>
<p>遍历方法2:<br />
</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #0000ff">for</span><span style="color: #000000">(var&nbsp;property&nbsp;in&nbsp;data)&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">property为序号,从0开始</span><span style="color: #008000"><br />
</span><span style="color: #000000">{<br />
&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;bean&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;data[property];<br />
&nbsp;&nbsp;&nbsp;&nbsp;alert(bean.name</span><span style="color: #000000">+</span><span style="color: #000000">"</span><span style="color: #000000">:</span><span style="color: #000000">"</span><span style="color: #000000">+</span><span style="color: #000000">bean.password);<br />
}</span></div>
<p>&nbsp;</p>
<p>相比返回为javabean多了一个遍历而已。</p>
<p>如果java方法的返回值为Map,则如下</p>
<p>&nbsp;</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #0000ff">for</span><span style="color: #000000">(var&nbsp;property&nbsp;in&nbsp;data)&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">property为key值</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">/*</span><span style="color: #008000">对于&nbsp;java方法的返回值为Map的情况，DWR将其转化为一个Object，<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;其中Object的属性为原Map的key值，属性值为原Map相应的&nbsp;value值</span><span style="color: #008000">*/</span><span style="color: #000000"><br />
{<br />
&nbsp;&nbsp;var&nbsp;bean&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;data[property];<br />
&nbsp;&nbsp;alert(bean.username);<br />
&nbsp;&nbsp;alert(bean.password);<br />
}</span></div>
<p>&nbsp;</p>
<p>如果知道key值，则可直接用:data.key拿到value</p>
<p>&nbsp;</p>
<p>调用有List、Set或者Map参数的java方法</p>
<p><br />
在dwr.xml的&lt;dwr&gt;标签内加入:&lt;signatures&gt;标签。</p>
<p>&lt;signatures&gt;标签是用来声明java方法中List、Set或者Map参数所包含的确切类，以便java代码作出判断，是js--&gt;java的。</p>
<p><br />
例参数是javabean的List,则只要在参数为javabean的例子里构造时候加上[]即可，如下：</p>
<p>var stu = [{name:"zhangsan",password:"zspassword"},{name:"lisi",password:"lspassword"}];<br />
//把List当作数组来处理<br />
AAA.bbb(stu,callBack);</p>
<p>并且在dwr.xml中增加如下的配置段(刚才试验了下，不加也可以)</p>
<p>&nbsp;</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">signatures</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;</span><span style="color: #0000ff">&lt;![CDATA[</span><span style="color: #808080"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;import&nbsp;java.util.List;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;import&nbsp;com.dwr.AAA;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//AAA的包路径要写完整<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;import&nbsp;com.dwr.TestBean;&nbsp;&nbsp;//javabean<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;AAA.bbb(List&lt;TestBean&gt;);&nbsp;<br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;</span><span style="color: #0000ff">]]&gt;</span><span style="color: #000000"><br />
<img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">signatures</span><span style="color: #0000ff">&gt;</span></div>
<p>&nbsp;</p>
<p>例参数是javabean的Map,key是String,value是javabean,如下:<br />
</p>
<p>&nbsp;</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #000000">var&nbsp;stu&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000"><br />
<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">key1</span><span style="color: #000000">"</span><span style="color: #000000">:{name:</span><span style="color: #000000">"</span><span style="color: #000000">zhangsan</span><span style="color: #000000">"</span><span style="color: #000000">,password:</span><span style="color: #000000">"</span><span style="color: #000000">zspassword</span><span style="color: #000000">"</span><span style="color: #000000">},<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">key2</span><span style="color: #000000">"</span><span style="color: #000000">:{name:</span><span style="color: #000000">"</span><span style="color: #000000">lisi</span><span style="color: #000000">"</span><span style="color: #000000">,password:</span><span style="color: #000000">"</span><span style="color: #000000">lspassword</span><span style="color: #000000">"</span><span style="color: #000000">}<br />
};<br />
<br />
AAA.bbb(stu,callBack);&nbsp;<br />
<br />
</span></div>
<p><br />
并且在dwr.xml中增加如下的配置段(刚才试验了下，不加也可以)</p>
<p>&nbsp;</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #0000ff">&lt;</span><span style="color: #800000">signatures</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;</span><span style="color: #0000ff">&lt;![CDATA[</span><span style="color: #808080"><br />
&nbsp;&nbsp;import&nbsp;java.util.List;<br />
&nbsp;&nbsp;import&nbsp;com.dwr.AAA;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//AAA的包路径要写完整<br />
&nbsp;&nbsp;import&nbsp;com.dwr.TestBean;&nbsp;&nbsp;//javabean<br />
&nbsp;&nbsp;AAA.bbb(Map&lt;String,TestBean&gt;);&nbsp;<br />
&nbsp;</span><span style="color: #0000ff">]]&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">signatures</span><span style="color: #0000ff">&gt;</span></div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<img src ="http://www.blogjava.net/liubijin/aggbug/320021.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liubijin/" target="_blank">無所謂</a> 2010-05-04 11:39 <a href="http://www.blogjava.net/liubijin/archive/2010/05/04/320021.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DWR.xml配置文件说明书</title><link>http://www.blogjava.net/liubijin/archive/2010/05/04/319999.html</link><dc:creator>無所謂</dc:creator><author>無所謂</author><pubDate>Tue, 04 May 2010 02:43:00 GMT</pubDate><guid>http://www.blogjava.net/liubijin/archive/2010/05/04/319999.html</guid><wfw:comment>http://www.blogjava.net/liubijin/comments/319999.html</wfw:comment><comments>http://www.blogjava.net/liubijin/archive/2010/05/04/319999.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liubijin/comments/commentRss/319999.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liubijin/services/trackbacks/319999.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 1、建立dwr.xml 配置文件任何一个dwr.xml的文件都需要包含DWR DOCTYPE的声明行，格式如下： &lt;!DOCTYPE&nbsp;dwr&nbsp;PUBLIC&nbsp;"-//GetAhead&nbsp;Limited//DTD&nbsp;Direct&nbsp;Web&nbsp;Remoting&nbsp;1.0//EN"&nbsp;"http://www...&nbsp;&nbsp;<a href='http://www.blogjava.net/liubijin/archive/2010/05/04/319999.html'>阅读全文</a><img src ="http://www.blogjava.net/liubijin/aggbug/319999.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liubijin/" target="_blank">無所謂</a> 2010-05-04 10:43 <a href="http://www.blogjava.net/liubijin/archive/2010/05/04/319999.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>