dwr.xml 主要分为三个部份,结构如下图:不过我们主要是以第二部份为主,其它的我也不了解。
第二部份的中create 的主要的组织如下:
<allow>
<create creator="..." javascript="..." scope="...">
<param name="..." value="..." />
<auth method="..." role="..." />
<exclude method="..." />
<include method="..." />
</create> ... </allow>
其中creator我主要是用Spring 或是new,如果和SPRING 整合的话,那就用Spring。
new:Java用“new”关键字创造对象
当然也可以填其它的关键字,但是我没有用,所以也就没有去看,抱歉。
javascript属性
(在浏览器里给你创建的对象命名),也就是在客户端创建一个这样的JS文件,也会创建一个文件的对象。在JSP页面中要经常用到这样的一个名称。
scope选项是可选的,默认为page,我一般不去修改。
Param 属性主要还是以下面的例子为主,name为 class ,value为具体的类。目前我只用到这一种。
<param name="class" value="com.example.XXX" />
如果是spring结合的话,那么就会变成这个样子的了。
<param name="beanName" value="bean_name 在SPRING 配制文件中的bean的名"/>
<exclude method="..." />
<include method="..." />
允许一个创造器去限制进入类的方法。一个创造器必须指定include列表或exclude列表之一
只可以选择一个来填充,不过include 是说外界可以访问的方法,而exclude 就是不给访问的方法。
第二部份中convert 有关的内容 。
convert主要是是关于javabean类的定义。有关于方法返回的转换器(是Bean 和 Object 转换器)
<convert converter="bean" match="your.full.package.XXX 类的名字>
<param name="include/exclude" value=xx,yy,zz,填充的内容是用于javabean的属性></param>
</convert>
这一部份的内容主要是有关方法返回的值 的转换。
以下是有关于使用的有关情况:
DWR根据dwr.xml生成和Java代码类似的Javascript代码。 相对而言Java同步调用,创建与Java代码匹配的Ajax远程调用接口的最大挑战来至与实现Ajax的异步调用特性。 DWR通过引入回调函数来解决这个问题,当结果被返回时,DWR会调用这个函数。
以下是一个简单的例子:
假设你有一个这样的Java方法:
public class Remote { public String getData(int index) { ... } }
我们可以在Javascript中这样使用:
<script type='text/javascript' src='[WEBAPP]/dwr/engine.js'>
</script>
<script type='text/javascript' src='[WEBAPP]/dwr/interface/Remote.js'>
</script>
<script type="text/javascript">
//str就是getData(42)返回的结果。再把这个结果在回调函数中体现出来。
Remote.getData(42, handleGetData);
function handleGetData(str) { alert(str); }
</script>
42是Java方法getData()的一个参数。 此外你也可以使用这种减缩格式: Remote.getData(42, function(str) { alert(str); });
最后一个部份是有关于util.js的有关内容的使用。但是/ engine.js的有关内容的使用的,这里不解释,个人也没有去看
大略上的讲: $ = document.getElementById。 因为在Ajax程序中,你会需要写很多这样的语句,所以使用 $() 会更简洁。
如果你希望在你更新了select以后,它仍然保持运来的选择,你要像下面这样做:
var sel = DWRUtil.getValue(id);
DWRUtil.removeAllOptions(id);
DWRUtil.addOptions(id, ...);
DWRUtil.setValue(id, sel);
DWRUtil.addOptions有5种模式
数组: DWRUtil.addOptions(selectid, array) 会创建一堆option,每个option的文字和值都是数组元素中的值。
对象数组 (指定text): DWRUtil.addOptions(selectid, data, prop) 用每个数组元素创造一个option,option的值和文字都是在prop中指定的对象的属性。
对象数组 (指定text和value值): DWRUtil.addOptions(selectid, array, valueprop, textprop) 用每个数组元素创造一个option,option的值是对象的valueprop属性,option的文字是对象的textprop属性。
对象: DWRUtil.addOptions(selectid, map, reverse)用每个属性创建一个option。对象属性名用来作为option的值,对象属性值用来作为属性的文字,这听上去有些不对。但是事实上却是正确的方式。如果reverse参数被设置为true,那么对象属性值用来作为选项的值。
对象的Map: DWRUtil.addOptions(selectid, map, valueprop, textprop) 用map中的每一个对象创建一个option。用对象的valueprop属性做为option的value,用对象的textprop属性做为option的文字。
ol 或 ul 列表: DWRUtil.addOptions(ulid, array) 用数组中的元素创建一堆li元素,他们的innerHTML是数组元素中的值。这种模式可以用来创建ul和ol列表。
以上是个人理解 和部份查阅,要是有错的,请见谅。