传知_12_dwr

DWR :

开发过程中,你主要做:

 

1. 开发Java类。  -- 没有任何新的东西。

2. 配置Java类。 

     -- 配置时候,使用了<create .../>元素。

   <create.../>元素用于将Java类创建成JS对象。

   其中<create.../>元素里creator指定所使用的创建器。

 

3. 在浏览器的JS代码中远程调用Java方法。

   1 。 远程、异步调用Java方法时需要额外地传入一个参数。

        参数就是一个形如function(data){}的回调函数。

        其中data就代表被调用的返回值。

   2 。 当Java方法参数、返回值是标量值(基本类型、字符串、Date)时,JS都有对应的类型。

        Java方法的参数、返回值是复合类型时,比如PersonCat等等VO、或集合等等...

        此时就涉及到  Java类型 ←→ JS类型  相互转换。这就需要使用转换器。

 

 

Ajax框架可以分为3类:

-轻量级的JS库:PrototypejQuery

-复杂的JS+UI库:Ext js Dojo

-远程RPC风格:DWR

 

2. 调用jQuery的方法来修改jQuery对象。

   修改内容。html()/html(内容)  / val()/val(内容)

   修改CSSheight() width() css()

   修改普通属性 attr()/attr(属性名 , 属性值)

   增加 append()/appendTo prepend/prependTo insertBefore/before  insertAfter/after

   删除

   替换

   包裹

------------DWR------------

远程RPC风格的Ajax框架

 

安装DWR

  a. 复制JAR包。

  b. web.xml文件中配置核心控制器(DwrServlet)

  c. 增加dwr.xml配置文件。

 

开发过程中,你甚至无需了解异步请求、响应的概念,只需按如下方法进行:

1. 开发Java类。

2. 配置Java类。

    1. 创建器:负责把Java类、Java对象创建成允许远程调用的JS对象。

       <create creator="new/spring/ejb" javascript="">

         <param name=""  /> 不同的创建器需要的参数是不同的。

       </create> 

    2. 转换器:负责完成服务器端Java类型和浏览器端JS类型之间的转换。

       只有bean object转换器需要显式打开并配置。

       <convert converter="bean/object" match="需要转换的类型">

         黑名单

            白名单

       </convert>

3. 以异步的方式调用Java的方法。

    a. 简单回调。调用时额外的多传入一个形如function(data){}的函数。

       data就是被调用方法的返回值。

    b. 复杂回调:调用时额外的多传入一个形如{callback: , timeout: }JS对象。

       通过该JS对象就可为DWR调用指定更多自定义选项。

 

DWR的两个JS

1 . engine.js :主要用于控制DWR的全局选项。

    当使用复杂回调时,可以通过JSON对象为异步调用设置一些选项,例如下面

      timeout

      exceptionHandler

      errorHandler

      preHook

      postHook

      ...

    但这些选项它们只对单次调用有效,于是可以通过

    dwr.engine.setXxx来设置一些全局选项,这些全局选项是所有的Ajax调用都起作用。

  

   两个额外的功能:

   a. 控制调用顺序。

   b. 进行批处理调用:一次与服务器的交互完成多次调用,从而提高性能。 

 

2 . util.js :用于简化DOM操作。

    $()  可认为是document.getElementById()的缩写。

      当我们把DWRutil.jsjQuery同时使用时,$()函数就会冲突了。

    解决方法:为jQuery$()起另一个别名。

    ------------------------------

    处理列表

       removeAllOptions()  删除所有选项。

       addOptions(DOM节点的ID , 数组);

       addOptions(DOM节点的ID , 对象数组 ,  属性名);

       addOptions(DOM节点的ID , 对象数组 ,  属性名  , 属性名);

       addOptions(DOM节点的ID , 对象 ,  true/false);

 

    ------------------------------

    处理表格

       它不仅用于操作表格,它可用于操作表格的<tbody>(于是就可以只操作表格某个部分)

     removeAllRows(tableId/tbodyId)  删除所有行。

     addRows(tableId/tbodyId , 数组 , 函数数组 , [option])

    --------------------------------

    访问表单控件的值

    getValue/getValues()

setValue/setValues()

 

util.js的工具函数:

onReturn

toDescriptiveString()

selectRange('text' , n , m)

=======================

DWR访问Servlet API

比如用户登录,用户登录成功后,是否应该将用户信息存入session

比如用户想调用某个受保护的页面,

 你是否应该通过session先检查用户是否已经登录,是否有足够的权限。

 

DWR本质上属于前端Web层框架,所以它必然需要访问Servlet API

1. 借助于WebContext工具类。

   WebContextFactory.get().getXxx()

   好处:简单、明了、易用。

   坏处:有一点代码污染。

2. 直接访问Servlet API

   在处理方法中增加额外的、Servlet API类型的形参。

   在浏览器的JS里调用该处理方法时,完全不需要理会这个Servlet API类型的形参。

 

DWR的异常处理

DWRStruts 2共存

 

//这条代码取消jQuery$(),并给$()起了一个新名字:j$()。 防止与util.js冲突

var j$ = jQuery.noConflict();

 

Callback

Timeout

ExceptionHandler

ErrorHandler

PreHook

PostHook

 

dwr.engine.setErrorHandler(function(msg , ex)

    {

        alert("远程服务异常:" + msg);

        alert(ex);

    });

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

折腾数据折腾代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值