`

DWR框架学习之<三>Bean处理

    博客分类:
  • AJAX
阅读更多

这部分将实际开发一个应用,套用了一个老外的示例模板,做了一个在线礼品的简易版本。
先讲一下应用的结构
页面端:
    demo.jsp用来展示界面
服务端:
    DemoAction是Struts中的Action子类负责控制转换,
    DemoFacade是业务类负责业务处理。
    Goods是一个业务实体类

Struts部分的配置就忽略不说了,实际上这个应用并没有包含Struts的配置
主要讲一下dwr的配置,首先需要在web.xml增加下面的servelt映射:

xml 代码
  1. <servlet>  
  2.     <description>Direct Web Remoter Servlet</description>  
  3.     <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>  
  4.   </servlet>  
  5.   <servlet-mapping>  
  6.     <servlet-name>dwr-invoker</servlet-name>  
  7.     <url-pattern>/dwr/*</url-pattern>  
  8.   </servlet-mapping>  

 

如上uk.ltd.getahead.dwr.DWRServlet是dwr的核心,用来处理javascript的对远程方法的调用,还有其他参数请参考相关文档。
然后,需要在dwr.xml配置相应的远程方法(与具体需要在客户端调用的方法相关),如下为演示应用的配置:

xml 代码
  1. <dwr>  
  2.     <allow>  
  3.         <convert converter="bean" match="dwr.demo.Goods"/>  
  4.         <create creator="new" javascript="DemoAction" class="dwr.demo.DemoAction">  
  5.             <include method="query4dwr"/>  
  6.             <include method="copy4dwr"/>  
  7.             <include method="paste4dwr"/>  
  8.         </create>  
  9.         <create creator="new" javascript="DemoFacade" class="dwr.demo.DemoFacade">  
  10.             <include method="queryList"/>  
  11.             <include method="restore"/>  
  12.             <include method="del"/>  
  13.         </create>  
  14.       </allow>  
  15. </dwr>  

如上有一个转换器(converter)是用来映射dwr.demo.Goods为bean类型,其他转换器类型请参考相关文档;还有两个创建器分别创建 javascript中的DemoAction类和DemoFacade类,分别对应dwr.demo.DemoAction类和 dwr.demo.DemoFacade,其中定义的方法就可以从javascript中直接调用了。
最后,我们需要在页面中包含相应的javascript:
  <script src="http://www.zhmy.com/dwr/interface/DemoAction.js"></script>
  <script src="http://www.zhmy.com/dwr/interface/DemoFacade.js"></script>
  <script src="http://www.zhmy.com/dwr/engine.js"></script>
  <script src="http://www.zhmy.com/dwr/util.js"></script>
如上,dwr/interface/DemoAction.js和dwr/interface/DemoFacade.js是dwr自动生成的 javascript文件,包含相应的类及方法,dwr/engine.js是dwr的核心引擎脚本处理客户端调用的转换,dwr/util.js包含了工具函数简化页面处理。

下面以查询为例,看一下dwr的具体使用:
DemoAction:
    public List query4dwr(int type, boolean needClear, HttpServletRequest request) {
        if (needClear) request.getSession().removeAttribute("dwr.demo.goodsId");
        return demoFacade.queryList(type);
    }
demo.jsp:
  function updateResults() {
    DWRUtil.removeAllRows("goodsbody");
    var type = document.getElementById("type").value;
    DemoAction.query4dwr(type, true, fillTable);
  }
  function fillTable(goods) {
    document.forms[0].select.checked = false;
    document.getElementById("totalRecords").innerHTML = goods.length;
    DWRUtil.addRows("goodsbody", goods, [ addCheckbox, getName, getPrice, getCount]);
  }
如上,DemoAction.query4dwr(type, true, fillTable)就可以直接调用DemoAction的方法了,这里fillTable是函数,dwr通过回调函数的方式来进行后续处理。比较一下 javascript和action中的方法参数,HttpServletRequest是可以不传的,dwr会自动加上,另一个就是回调参数放在最后,这是比较好的方式,其他方式请参考文档。

最后看一下,dwr如何与Struts集成,如下代码:
    public ActionForward query(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
        String type = request.getParameter("type");
        //或者从form中取值
        
        List goodsList = query4dwr(Integer.parseInt(type), true, request);
        request.setAttribute("goodsList", goodsList);
        
        return mapping.findForward("success");
    }

    public List query4dwr(int type, boolean needClear, HttpServletRequest request) {
        if (needClear) request.getSession().removeAttribute("dwr.demo.goodsId");
        return demoFacade.queryList(type);
    }
前一个方法是Struts的方式,但dwr不支持,因此要重构一下在下面的方法才可以被dwr调用。
实际上,只有在方法中需要使用到HttpServletRequest是才需要重构方法,如果不使用HttpServletRequest,我们就可以直接调用业务层的类的方法,这样即简单又方便,如下:
demo.jsp:
  function restore() {
    DemoFacade.restore(updateResults);
  }

DemoAction:
    public synchronized void restore() {
        goodsList.clear();    
        initGoods();
    }

小结

  dwr封装了ajax中与服务端交互的模块,通过直接调用服务端类的方法简化了客户端与服务端的交互。虽然说还缺省类似tag这样的组件,但已经很大程度简化了ajax的开发。

 

资源
 
  dwr主站:http://getahead.ltd.uk/dwr 
  ajax主站:http://en.wikipedia.org/wiki/AJAX

分享到:
评论

相关推荐

    DWR框架配置学习教程

    ### DWR框架配置学习教程 #### 一、DWR框架简介与配置 DWR(Direct Web Remoting)是一个用于简化Ajax应用开发的框架,它可以让客户端JavaScript代码直接调用服务器端Java方法,从而大大简化了前端与后端的交互...

    spring2 整合 Dwr(把DWR的配置写到Spring的配置文件)

    &lt;bean id="dwr" class="uk.co.edgaroswald.dwr.DWRConfiguration"&gt; &lt;!-- 配置DWR的设置,如安全、白名单等 --&gt; &lt;/bean&gt; ``` 4. **创建可调用的Java类** 创建一个Java类,该类的方法将被前端JavaScript调用。...

    dwr框架的源代码示例ajax

    总的来说,DWR框架通过简化Ajax通信,让开发者可以更专注于业务逻辑,而不是底层的网络通信细节。这个示例将帮助你理解如何配置DWR,使其与Spring协同工作,以及如何处理集合类型的参数和返回值。通过深入学习和实践...

    Dwr配置详解.doc

    &lt;url-pattern&gt;/dwr/*&lt;/url-pattern&gt; &lt;/servlet-mapping&gt; ``` 二、配置dwr.xml文件 dwr.xml文件是DWR的核心配置文件,用于定义 remotable对象、转换器和签名信息。 ```xml &lt;dwr&gt; &lt;allow&gt; &lt;!-- 使用new关键字...

    DWR实现Ajax的配置过程

    &lt;artifactId&gt;dwr&lt;/artifactId&gt; &lt;version&gt;3.0.4&lt;/version&gt; &lt;/dependency&gt; ``` 如果手动添加jar包,则需要下载DWR的相关jar包并将其放置在项目的`WEB-INF/lib`目录下。 ##### 2. 创建并配置`dwr.xml` 接着,在`...

    Spring与DWR结合

    &lt;script type="text/javascript" src="/dwr/interface/UserService.js"&gt;&lt;/script&gt; &lt;script type="text/javascript"&gt; UserService.getUserInfo(function(userInfo) { // 处理返回的数据 }); &lt;/script&gt; ``` ...

    Dwr入门操作手册

    &lt;script type='text/javascript' src='/TestDWR1/dwr/interface/TestDWR.js'&gt;&lt;/script&gt; &lt;script type='text/javascript' src='/TestDWR1/dwr/engine.js'&gt;&lt;/script&gt; &lt;script type='text/javascript' src='/TestDWR...

    dwr推模式学习资料

    ### dwr推模式学习资料知识点解析 #### 一、DWR简介及推模式概述 **Direct Web Remoting (DWR)** 是一个简化Ajax应用程序开发的Java框架,它允许客户端JavaScript直接调用服务器端的Java方法,从而使得开发更加...

    dwr框架资料(主要是关于dwr配置文件的说明)

    在DWR框架中,配置文件起着至关重要的作用,它是连接客户端和服务器端的关键桥梁。通常,DWR的配置文件是`dwr.xml`,这个文件位于Web应用的WEB-INF目录下。通过这个文件,我们可以定义哪些Java类和方法可以被远程...

    dwr教程的开发

    Direct Web Remoting (DWR) 是一种开源的Java框架,用于在Web应用程序中实现JavaScript和服务器端Java对象之间的双向通信。DWR简化了Ajax(Asynchronous JavaScript and XML)的使用,使得开发者可以在不刷新整个...

    dwr spring服务器主动推送示例代码

    &lt;bean id="dwrConfig" class="org.directwebremoting.config.DwrConfiguration"&gt; &lt;!-- 配置其他属性 --&gt; &lt;/bean&gt; &lt;filter&gt; &lt;filter-name&gt;DWR Filter&lt;/filter-name&gt; &lt;filter-class&gt;org.directwebremoting.servlet...

    Dwr 学习研究应用--Spring和DWR的整合

    &lt;servlet-name&gt;DWR&lt;/servlet-name&gt; &lt;servlet-class&gt;org.directwebremoting.spring.DwrSpringServlet&lt;/servlet-class&gt; &lt;init-param&gt; &lt;param-name&gt;contextConfigLocation&lt;/param-name&gt; &lt;param-value&gt;/WEB-INF/...

    DWR学者能够很快的学会

    - `&lt;convert converter="bean" match="dwr.sample.Apartment"/&gt;`:指定对`dwr.sample.Apartment`类的对象使用Bean转换器。 - `&lt;create&gt;`标签用于创建可由JavaScript访问的Java对象。 - `creator="new"`:表示使用...

    DWR学习与DWR.xml配置说明

    **DWR.xml配置文件**是DWR框架的核心配置,它定义了哪些Java类和方法可以被客户端JavaScript访问。以下是一些关键配置元素的解释: 1. **&lt;dwr&gt;`根元素**:这是配置文件的起点,通常包含其他所有配置元素。 2. **`...

    dwr3.0搭建与讲解

    &lt;script type="text/javascript" src="/dwr/interface/MyService.js"&gt;&lt;/script&gt; &lt;script type="text/javascript"&gt; MyService.getHello(function(response) { alert(response); }); &lt;/script&gt; ``` ### 6. AJAX...

    ajax配置模版

    &lt;url-pattern&gt;/dwr/*&lt;/url-pattern&gt; &lt;/servlet-mapping&gt; ``` - **`DwrServlet`**: DWR的Servlet负责处理客户端发送过来的请求,并调用后端Java对象的方法。 - **`debug`**: 设置为`true`表示开启调试模式,可以...

    dwr实例教程 很好的入门实例

    3. **集成Spring框架**:DWR支持Spring框架,这意味着可以在JavaScript中直接访问Spring管理的Bean,进一步简化了开发流程。 4. **其他特性**:包括支持多种日志记录组件(如commons-logging)、支持多种选择等。 #...

    dwr学习笔记和总结

    ### dwr学习笔记和总结 #### 一、DWR简介 DWR (Direct Web Remoting) 是一个简化Ajax开发的框架,它使得JavaScript能够直接调用服务器端的Java方法成为可能,无需编写复杂的Ajax代码。这极大地提高了开发效率,并...

    DWR全面解析.doc

    例如,通过`&lt;create&gt;`标签,你可以指定使用Spring框架来实例化Java对象,并通过`&lt;param&gt;`标签将Spring中的bean注入到DWR中。 3. **beans.xml配置**:在`beans.xml`中,你需要定义你要远程调用的Java类,将其作为...

Global site tag (gtag.js) - Google Analytics