`

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示例 博文链接:https://ReturnOfKing.iteye.com/blog/249737

    dwr3 学习笔记<一>

    NULL 博文链接:https://lee20101029.iteye.com/blog/960569

    java技术员必下的最强大的插件,搜索JSmart_1.3.1.jar(寻觅插件)然后下载

    可以快速构建JSP列表页面.&lt;br&gt;&lt;br&gt;&lt;br&gt;主要功能:&lt;br&gt;1、SSH框架一键配置&lt;br&gt;2、JSP列表标签导入及JSP页面列表快速生成(内置两套开源标签)&lt;br&gt;3、AJAX框架两套EXT2及DWR框架快速导入&lt;br&gt;4、HTML在线编辑器一键导入...

    java开发者必用的插件,搜索JSmart_1.3.1.jar(寻觅插件)然后下载

    可以快速构建JSP列表页面.&lt;br&gt;&lt;br&gt;&lt;br&gt;主要功能:&lt;br&gt;1、SSH框架一键配置&lt;br&gt;2、JSP列表标签导入及JSP页面列表快速生成(内置两套开源标签)&lt;br&gt;3、AJAX框架两套EXT2及DWR框架快速导入&lt;br&gt;4、HTML在线编辑器一键导入...

    dwr源码包,dwr.jar包下载

    1、 导入dwr.jar包 2、 在web.xml中配置dwr,如下: &lt;!-- 配置DWR --&gt; &lt;servlet&gt; &lt;servlet-name&gt;dwr-invoker&lt;/servlet-name&gt; &lt;servlet-class&gt; org.... &lt;url-pattern&gt;/dwr/*&lt;/url-pattern&gt;

    DWR中文文档.pdf

    DWR进阶 63&lt;br/&gt;8.1 DWR Annotations 63&lt;br/&gt;8.1.1 初始配置 63&lt;br/&gt;8.1.2 远程访问类 63&lt;br/&gt;8.1.3 对象转换 64&lt;br/&gt;8.2 错误和异常处理 64&lt;br/&gt;8.2.1 错误处理 64&lt;br/&gt;8.2.2 异常 65&lt;br/&gt;8.2.3 找出更多的信息 65...

    spring+struts+hibernate+dwr+jstl做的实例

    完全由Spring接管DWR AJAX处理(不需要配置dwr.xml)等技术点&lt;br&gt;源码在/mytest/WEB-INF/src下&lt;br&gt;Winxp sp3+JDK1.6+Tomcat 6.0下运行通过&lt;br&gt;因文件长度限制,未加入相关类库,请自行加入,需要的类库有:&lt;br&gt;dom.jar...

    ajax框架Dwr的具体使用步骤

    &lt;servlet-name&gt;dwr-invoker&lt;/servlet-name&gt; &lt;servlet-class&gt; org.directwebremoting.servlet.DwrServlet &lt;/servlet-class&gt; &lt;init-param&gt; &lt;param-name&gt;debug&lt;/param-name&gt; &lt;param-value&gt;true&lt;/...

    dwr框架的简单demo

    &lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 3.0//EN" "http://www.getahead.ltd.uk/dwr/dwr30.dtd"&gt; &lt;dwr&gt; &lt;allow&gt; ... &lt;/dwr&gt;

    一个基于ext的ajax小例子

    &lt;br&gt;&lt;br&gt;在grid的演示部分,包括了分页的数据调用和如何处理来自于dwr的数据(dwr的部分和官方网站公布的方法一样) &lt;br&gt;以及grid的事件处理。 &lt;br&gt;&lt;br&gt;实例的源代码中没有包括jar包,如果需要运行,请根据jar.jpg所...

    DWR教程包

    内容包括:&lt;br&gt;DWR教程.txt&lt;br&gt;DWR实例教程.txt&lt;br&gt;DWR学习.txt&lt;br&gt;DWR应用总结.txt&lt;br&gt;DWR购物车实例&lt;br&gt;DWR与界面开发&lt;br&gt;一个简单的例子&lt;br&gt;DWR 入门与应用-林信良(良葛格).doc

    spring-hibernate-dwr实例

    spring-hibernate-dwr做的AJAX操作CRUD实例&lt;br&gt;环境:myeclipse6.0+jdk1.6&lt;br&gt;所需lib列表,请自行加入&lt;br&gt;mysql-connector-java-3.1.7-bin.jar&lt;br&gt;antlr-2.7.6rc1.jar&lt;br&gt;asm-attrs.jar&lt;br&gt;cglib-2.1.3.jar&lt;br&gt;...

    SSH例子

    &lt;br&gt;功能:使用dwr完成在客户端无刷新的分页排序等&lt;br&gt;&lt;br&gt;工具:MyEclipse 6.0,数据库SQLSERVER 2000&lt;br&gt;&lt;br&gt;数据在SQL文件夹下,Jobs是pubs数据库自带的&lt;br&gt;&lt;br&gt;主要的三个页面,emp是详细的,另两个是简单的复制修改,...

    DWR与界面开发

    DWR.xml配置文件说明书.doc&lt;br&gt;DWR笔记.doc&lt;br&gt;DWR技术分析.doc&lt;br&gt;DWR开发培训.ppt&lt;br&gt;DWR学习.doc&lt;br&gt;WEB界面开发规范.doc&lt;br&gt;树控件.rar

    dwr使用方法,配置

    &lt;dwr&gt;  &lt;allow&gt;  &lt;create creator="new" javascript="testClass" &gt;  &lt;include method="testMethod1"/&gt;  &lt;/create&gt;  &lt;/allow&gt;  &lt;/dwr&gt;  &lt;allow&gt;标签中包括可以暴露给javascript访问的东西。  &lt;create&gt;标签中...

    dwr自己配置一个实例

    &lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 3.0//EN" ... &lt;param name="class" value="com.dwr.bean.Hello" /&gt; &lt;/create&gt; &lt;/allow&gt; &lt;/dwr&gt;

    dwr 框架dwr 框架dwr 框架dwr 框架dwr 框架dwr 框架

    dwr 框架dwr 框架dwr 框架dwr 框架dwr 框架dwr 框架

    dwr-1.13.jar及dwr.xml

    dwr-1.1.3.jar及dwr.xml.&lt;br/&gt;dwr-1.1.3与dwr-2.0的dwr.xml略有区别:&lt;br/&gt;dwr-1.1.3&lt;br/&gt;&lt;!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN" ...

    DWR.xml配置文件说明书.txt

    &lt;dwr&gt; &lt;init&gt; &lt;creator id="..." class="..."/&gt; &lt;converter id="..." class="..."/&gt; &lt;/init&gt; &lt;allow&gt; &lt;create creator="..." javascript="..." scope="..."&gt; &lt;param name="..." value="..."/&gt; &lt;/create&gt; &lt;convert ...

Global site tag (gtag.js) - Google Analytics