dwr学习文档(6)

2019-04-23 13:11

public class Remoted {

public void setStatus(Status p) { // ... } }

enum Status { PASS, FAIL, }

如果Remoted类已经配置好Creator,并且Status枚举类型已经设置了EnumConverter。那么你就可以在javascript中这样调用: Remoted.setStatus(\如果没有匹配的类型,就会抛出异常。

DOM 对象(DOM Objects )

DWR可以自动转换来之DOM,DOM4J,JDOM和XOM的DOM树。你可以简单得用上面这些类库返回一个Document、Element或者Node,DWR会把他们自动转换成浏览器的DOM对象。

在程序启动的时候会有一个常见的关于JDOM转换器的警告,你可以放心的忽略它,除非你要用JDOM:

INFO: Missing classdef for converter 'jdom'. Failed to load uk.ltd.getahead.dwr.convert.JDOMConverter. Cause: org/jdom/Document 因为DWR没有办法知道你是否想用JDOM,所以这个信息设在INFO级别的。

如果你曾经尝试过使用JDOM,你会意识到在这种情况下这个转换器不可用的 - 这也是我们显示这个信息的原因。 exist-db.org

我相信DWR能同exist-db很好的工作,因为它是建立在W3C DOM之上的,而DWR也支持这个。

DWR 和 Hibernate(Hibernate整合)

让DWR和Hibernate正常工作的检查列表

1. 确保你使用的是最新的DWR。Hibernate转换器是新东西,所以你需要下载最新

2. 确保你已经明白开始指南上所写的内容。

3. 确保你的Hiberante在没有DWR的时候工作正常。 4. 如果是Spring和Hibernate一起使用,那么你最好先了解一下如何将整合Spring。 5. 配置DWR,使之与Hibernate一起工作。 (看下面)。

6. 查看演示页面:http://localhost:8080/YOUR-WEBAPP/dwr,确定Spring的

Bean可以出现。 HibernateBeanConverter

这个转换器同标准的BeanConverter非常相似,不同之处在于我们可以决定如何处理延迟加载。

使用HibernateBeanConverter可能会带来如下风险:

? ?

架构: HibernateBeanConverter不符合MVC模式,所以不能把对象在数据曾和表现曾之间进行隔离。这个风险可以通过在上面加上独立的bean来减轻。

性能: DWR试图通过相同的序列化方式来转换所有可以得到的属性(除了DWR仅仅读JavaBean属性的时候)。所以可能会出现通过HTTP序列化了你的整个数据的情况。通常这并不是你想要的。要减少这一风险可以使用

BeanConverter(HibernateBeanConverter衍生于它)的排除某些属性的功能:

HibernateBeanConverter会尝试不去读取没有初始化的属性。如果你只是想读取所有的东西那么应该使用BeanConverter。

建议使用Hibernate3,实际上Hibernate2一下的情况,你会发现你得到的都是空的Bean。

Session管理

如果你使用Hibernate对象,你需要知道每一个DWR请求都是一个新的Servlet请求,所以你需要保证为每个请求打开一个Hiberante的Session。

如果你用Spring,那么可以很方便的使用Spring里面的OpenSessionInViewFilter,它可以保证为每个请求打开一个Hiberante的Session。类似的解决方案在其它Framework中也存在。

Servlet Objects (HttpServletRequest, HttpSession, etc)

可选的init部分用来声明创造bean的类和转换bean的类。多数情况下你不需要用到他们。如果你需要定义一个新的Creator [JavaDoc] 和 Converter [JavaDoc] , 那么你就需要在这里定义他们。但是建议你现检查一下DWR是不是已经支持了。

在init部分里有了定义只是告诉DWR这些扩展类的存在,给出了如何使用的信息。这时他们还没有被使用。这中方式很像Java中的import语句。多数类需要在使用前先import一下,但是只有import语句并不表明这个类已经被使用了。每一个creator和converter都用id属性,以便后面使用。

dwr.xml中的签名(Signatures)

DWR使用反射来找出在转换时应该用那种类型。有时类型信息并不明确,这时你可以在这里写下方法的签名来明确类型

signatures段使DWR能确定集合中存放的数据类型。例如下面的定义中我们无法知道list中存放的是什么类型。

public class Check {

public void setLotteryResults(List nos) { ... } }

signatures段允许我们暗示DWR应该用什么类型去处理。格式对以了解JDK5的泛型的人来说很容易理解。

import java.util.List; import com.example.Check;

Check.setLotteryResults(List nos); ]]>

DWR中又一个解析器专门来做这件事,所以即便你的环境时JDK1.3 DWR也能正常工作。

解析规则基本上会和你预想规则的一样(有两个例外),所以java.lang下面的类型会被默认import。

第一个是DWR1.0中解析器的bug,某些环境下不能返回正确类型。所以你也不用管它了。 第二个是这个解析器时\阳光(sunny day)\解析器。就是说它非常宽松,不想编译器那样严格的保证你一定正确。所以有时它也会允许你丢失import:

import java.util.List;

Check.setLotteryResults(List); ]]>

将来的DWR版本会使用一个更正式的解析器,这个编译器会基于官方Java定义,所以你最好不要使用太多这个不严格的东西。

signatures段只是用来确定泛型参数中的类型参数。DWR会自己使用反射机制或者运行时类型确定类型,或者假设它是一个String类型。所以: 不需要signatures - 没有泛型参数:

public void method(String p); public void method(String[] p); 需要signatures - DWR不能通过反射确定:

public void method(List p);

public void method(Map p); 不需要signatures - DWR能正确的猜出:

public void method(List p); public void method(Map p); 不需要signatures - DWR可以通过运行时类型确定:

public List method(String p);

没有必要让Javascript中的所有对象的key都是String类型 - 你可以使用其他类型作为key。但是他们在使用之前会被转换成String类型。DWR1.x用Javascript的特性把key转换成String。DWR2.0可能会用toString()方法,在服务段进行这一转换。

DWR Annotations

从DWR2.0(正在开发)开始,你也可以用Annotations来配置DWR DWR标注是用来代替dwr.xml或者与其一同工作的。 初始配置

要使用DWR的标注,你需要在web.xml中配置不同的DWR控制器。

DWR controller servlet DWR controller servlet

org.directwebremoting.servlet.DwrServlet

classes

com.example.RemoteFunctions, com.example.RemoteBean

servlet参数classes定义的时可以标注的类的全名,这些名字用逗号分割。 远程访问类

要使一个简单的class可以成为远程访问类,你需要使用@Create和@RemoteMethod标注。 @Create

public class RemoteFunctions { @RemoteMethod

public int calculateFoo() { return 42; } }

没有被@RemoteMethod标注的方法不能被远程访问。

要在Javascript使用不同于类型的名字,使用@Create标注的 name 属性。 @Create(name=\)


dwr学习文档(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:02增值税法

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: