`

dwr处理关联对象

阅读更多
<!--l version="1.0" encoding="UTF-8--><!--CTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN" "http://www.getahead.ltd.uk/dwr/dwr10.dt-->

看了上面XML的配置,大家一定可以看明白如何配置DWR,现在具体的讲讲. 这部分是可选配置的,所以在上面的配置文件中没有,声明那些用于建立远程bean和在方法调用中转换bean的类.多数情况下可以不必使用它,如果你想定义一个新的creator或者converter那么就必须在这部分中声明,具体的可以查看dwr.jar中的dwr.xml是如何配置的,或者到它的官网看看! 1. allow段落里面定义的是DWR可以创建和转换的类。 2.Creators dwr.xml文件中的create元素的结构如下: ...   这里的多数元素都是可选的 - 你真正必须知道的是指定一个creator和一个javascript名字。   creator是用来指定使用那种创造器, DWR1.1有八种创造器。它们是: new: 用Java的new关键字创造对象。none: 它不创建对象scripted: 通过BSF使用脚本语言创建对象,例如BeanShell或Groovy。spring: 通过Spring框架访问Bean。jsf: 使用JSF的Bean。 (v1.1+)struts: 使用Struts的FormBean。 (v1.1+)pageflow: 访问Beehive或Weblogic的PageFlow。 (v1.1+)ejb3 如果你需要写自己的创造器,你必须在init部分注册它。none 创造器不创建任何对象, 它会假设你不需要创建对象。有两种情况:可能在使用的scope不是"page",并在在前面已经把这个对象创建到这个scope中了,这时你就不需要再创建对象了。还有一种情况是要调用的方法是静态的,这时也不需要创建对象。DWR会在调用创建器之前先检查一下这个方法是不是静态的。 javascript属性 用于指定浏览器中这个被创造出来的对象的名字。你不能使用Javascript的关键字。 scope属性 可选,非常类似servlet规范中的scope。它允许你指定这个bean在什么生命范围。选项有"application", "session", "request" 和"page"。默认是page. param元素 被用来指定创造器的其他参数,每种构造器各有不同。在上面的dwr.xml中显示了spring的配制 方法,而在简单部署DWR中有new的配置方法!struts和jsf的配置如下: scripted的配置相对来说比较复杂,对于单例类很适用: import org.apache.commons.validator.EmailValidator; return EmailValidator.getInstance();      auth元素 允许你指定一个J2EE的角色作为将来的访问控制检查: include和exclude元素 允许创造器来限制类中方法的访问。一个创造器必须指定include列表或exclude列表之一。如果是include列表则暗示默认的访问策略是"拒绝";如果是exclude列表则暗示默认的访问策略是"允许"。例如只想访问addMessage()方法,你应该把如下内容添加到dwr.xml中。 如果有多个,就写多行。 3.Converters 类型转换器,转换器可以把POJO转换成Javascript的接合数组(类似与Java中的Map),或者反向转换。 JDK中的多数类型已经有转换器了,一般来说JavaBean的参数需要一个定义。 具体的结构如: 默认情况下,如下类型不需要定义就可以转换:boolean, byte, short, int, long, float, double, char, java.lang.Boolean, java.lang.Byte, java.lang.Short, java.lang.Integer, java.lang.Long, java.lang.Float, java.lang.Double, java.lang.Character, java.math.BigInteger, java.math.BigDecimal 和 java.lang.String.具体的你可以打开dwr.jar,在org.directwebremoting包中找到一个dwr.xml的文件,后半部分以convert为标签的都是。在这些基础转换器中,特别要提的是Date转换器,它负责在Javascript的Date类型与Java中的Date类型(java.util.Date, java.sql.Date, java.sql.Times or java.sql.Timestamp)之间进行转换。如果你有一个Javascript的字符串 (例如"01 Jan 2010") ,你想把它转换成Java的Date类型有两个办法:在javascript中用Date.parse()把它解析成Date类型,然后用DWR的DateConverter传递给服务器;或者把它作为字符串传递给Server,再用Java中的SimpleDateFormat(或者类似的)来解析。同样,如果你有个Java的Date类型并且希望在HTML使用它。你可以先用SimpleDateFormat把它转换成字符串再使用。也可以直接传Date给Javascript,然后用Javascript格式化。第一种方式简单一些,尽管浪费了你的转换器,而且这样做也会是浏览器上的显示逻辑受到限制。 match是用于告诉DWR你将需要把java中的哪些类转换成js。你也可以写成dwr.test.*,但我并不推荐大家这样使用。为什么呢?如果你像前面那样一个一个地注册对象,则就可以在页面使用这个的语句初始化一个对象: varuser = new User(); 如果你使用后一种方法去批量注册对象,那么你就不能这样初始化这个对象而只能这样手动注册: Varuser = {userid:"", username:null, ……}; Javascript用于说明你在页面中使用这个对象的名称,强烈建议大家使用首字母大写,在JS中容易看出这是一个与后台对应的对象。 Converter用于告诉DWR用什么DWR的类来执行转换,常用的转换器有bean、object、hibernate2、hibernate3等。DWR有哪些转换器可以在dwr.jar的dwr.xml中找到。用bean转换器对于转换一些简单的javabean(属性是基础对象)的比较适合,因为DWR会将该值对象的所有属性,及其这些属性的所有属性,所有属性的属性,都以穷举的方式取出来,如果是复杂对象会有效率上的问题以及其他意外的问题。如果使用了项目中使用了hibernate那么选择hibernate3比较好,因为它不但能够很好的解决bean转换中的问题,还解决了延迟查询的问题,而且hibernate2还有其它的问题,比如容易取到空Bean! 另外一个需要提的是,与creator一样,转换器也可以一样地设置exclude和include参数。但是与creator不同的是,是指转换对象的时候需要转换或不转换某些属性。这个参数对于hibernate的一对一关联非常重要。在hibernate中一对一关联是不做延迟查询的,假如有一个值对象Employee与值对象Address是一对一关联,那么Employee中有Address的属性,而Address中有Employee的属性。由于一对一关联不做延迟查询,当DWR在转换一个Employee是会装载它的属性Address,然后在装载Address的时候,又会去装载Address中的Employee属性。如此这样,就会形成一个死循环,最后以堆栈溢出告终。解决这个问题的办法就是禁掉Address中的Employee属性,避免产生死循环。具体写法如下: value部分是需要转换的属性,如果有多个则用逗号隔开就可以了! 4.(Signatures) Signatures:dwr.xml中的签名,DWR使用反射来找出在转换时应该用那种类型。有时类型信息并不明确,signatures段使DWR能确定集合中存放的数据类型。对于list,map等集合有效。 signatures段允许我们暗示DWR应该用什么类型去处理。格式对以了解JDK5的泛型的人来说很容易理解。

<!--DATA[ import java.util.List; import com.example.Check; Check.setLotteryResults(List<Integ-->

nos); ]]> DWR中又一个解析器专门来做这件事,所以即便你的环境时JDK1.3 DWR也能正常工作。 解析规则基本上会和你预想规则的一样(有两个例外),所以java.lang下面的类型会被默认import。 第一个是DWR1.0中解析器的bug,某些环境下不能 (本内容来自唯才教育网http://www.hn1c.com 原文地址:http://www.hn1c.com/diannao/dn53397/)

分享到:
评论

相关推荐

    DWR中文文档DWR

    - **dwr.properties**:配置DWR的行为,如错误处理、缓存策略等。 - **XML配置**:可使用XML文件定义允许客户端调用的Java方法。 3. **主要组件**: - **Engine**:DWR引擎是核心,负责处理Ajax请求和响应。 - ...

    dwr2.0 dwr3.0 jar包

    在这个版本中,DWR提供了一套全面的API,包括自动转换Java对象到JSON格式,以及处理安全性和并发性问题。此外,DWR 2.0支持自动刷新,这意味着当服务器端的Java类或方法发生变化时,无需重新加载页面,客户端的...

    dwr+spring实例

    当服务器端发生错误时,DWR可以将异常信息转换为JavaScript错误对象,使得客户端能够捕获并处理这些异常。这对于提供良好的用户体验至关重要。 综上所述,"DWRSpring实例"是一个很好的学习资源,可以帮助我们理解...

    DWR级联菜单下拉框

    - 在JavaScript中,使用`DWRUtil`或`DWREngine`对象来调用Java方法,获取数据后更新DOM以改变下拉框的选项。 5. **事件处理与异步通信**: - 使用`onChange`事件监听下拉框的改变,当用户选择一个选项时,触发DWR...

    dwr.jar dwrUtil常见方法 dwr详细资料

    2. **DWRUtil类**:DWRUtil是DWR提供的一系列实用工具函数的集合,包括但不限于数据转换(如JSON到Java对象的转换)、错误处理、DOM操作等,为开发者提供便利。 3. **Ajax支持**:DWR利用Ajax技术实现了页面的局部...

    dwr异步操作

    例如,`RemoteProxy`可以创建一个与特定Java对象关联的JavaScript对象,然后通过这个对象调用服务器端的方法。 4. **异步调用**:DWR的主要优势在于其异步调用机制。JavaScript调用Java方法后,不会阻塞页面,而是...

    dwr的例子 反向AJAX 实现时时提醒

    3. **映射器(Mapper)**:映射器负责将JavaScript对象和服务器端的Java对象关联起来,确保正确的方法被调用。 4. **安全(Security)**:DWR提供了一套机制来防止跨站脚本攻击(XSS)和其他类型的攻击,确保只有...

    dwr与spring一起使用的方法

    DWR处理了诸如JSON或XML序列化、跨域安全、错误处理和缓存等复杂问题,让开发者可以专注于业务逻辑。 集成DWR和Spring的关键在于配置。在Spring配置文件中,我们需要声明DWR的`DWRServlet`,并将其注册为一个...

    dwr推模式

    标题 "dwr推模式" 涉及...- `dwr.xml`:DWR的配置文件,定义了允许的Java对象、方法以及推模式的设置。 通过这些文件的配合,一个基于DWR推模式的Web应用可以实现实时的数据更新,为用户提供更流畅、高效的交互体验。

    DWR+JPA DWR直接访问SERVICE层,并直接处理DAO返回的BEAN.doc

    比如,`HostGroup`和`RealHost`存在一对多关系,如果不做特殊处理,DWR在序列化`HostGroup`时会连同所有关联的`RealHost`一起传输到浏览器,这可能导致性能问题。为了防止这种情况,我们需要在DWR的转换配置中排除...

    DWR在线即时聊天系统,实现了对指定用户发送消息,和即时显示功能

    DWR调用与界面更新紧密关联,确保用户交互的实时性。 6. **错误处理**:DWR提供了异常处理机制,当服务器端方法抛出异常时,可以在客户端捕获并处理,提供友好的用户提示。 7. **性能优化**:为了提高性能和用户...

    dwr ajax 学习框架

    DWR与Ajax(Asynchronous JavaScript and XML)技术紧密关联,后者是实现网页无刷新更新的核心技术。 在学习DWR框架时,首先要理解其基本概念和工作原理。DWR通过在浏览器端创建JavaScript对象来调用服务器端的Java...

    struts2+hibernate+spring+dwr整合

    2. Spring 作为整体的容器,管理所有组件的生命周期,包括Struts2的Action、Hibernate的数据访问对象(DAO)以及DWR的远程接口。Spring的DI特性使得各组件之间的依赖关系得以解耦。 3. Hibernate 作为持久层框架,...

    dwr-struts-示例

    - 配置Spring或Struts的Action配置文件,以便将DWR与Struts Action关联起来。 2. **Struts的Action类**: - 创建一个Struts Action类,该类通常包含了业务逻辑,需要暴露给DWR调用的方法。 3. **DWR的JavaScript...

    dwr学习笔记

    配置文件中使用BeanConverter,然后直接将JavaScript对象传递给`save`方法,DWR会自动处理对象到Bean的转换。 ### 3. 删除对象 删除操作也分为两种方式: #### 第一种方式: 1. JSP页面中有一个隐藏字段`userid`...

    DWR AJAX 简单示例

    **总结:** DWR通过提供简单的API和自动化处理,使得开发人员能够轻松地实现AJAX功能,如级联下拉菜单,而无需深入了解底层的XMLHttpRequest对象。通过动态调用服务器端方法,DWR大大简化了Web应用的开发,提高了...

    三级联动代码 DWR

    在本案例中,"三级联动代码 DWR"指的是使用DWR来实现一个具有三级关联的下拉菜单,当用户在一级菜单中选择一项时,二级菜单会自动更新,然后根据二级菜单的选择,三级菜单也会动态改变。这种方式可以提升用户体验,...

    个人编写的一份dwr入门源代码

    3. **两列表关联**:此示例展示了DWR如何处理两个或多个表单元素之间的联动。比如,当用户在一个下拉框中选择一项时,另一个下拉框会根据选择的内容动态更新其选项。这涉及到DWR的事件监听和异步数据刷新功能。 4. ...

    HelloWorld-Dwr

    Servlet映射到`/dwr/*`,这意味着所有以`/dwr/`开头的URL都将由DWR处理。`web.xml`的配置是这样的: ```xml ... &lt;servlet-name&gt;dwr-invoker &lt;servlet-class&gt;org.directwebremoting.servlet.DwrServlet ...

Global site tag (gtag.js) - Google Analytics