`
yuexiaodong
  • 浏览: 70349 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

DWR获取返回值

    博客分类:
  • js
阅读更多

        javascript默认是同步执行的,但是DWR是异步执行的,所以如果需要取回后台传回的数据的时候,必须设置同步,这样保证数据完整取到,不然会出现undefined错误;

     代码如下:

    

function test(){
  var result;
  dwr.engine.setAsync(false);
  DwrTest.hello(function(data){result=data;});
  dwr.engine.setAsync(true);
  return result;
}

 

这样就可以获取到返回值了;

 

另外关于Dwr在监视浏览器关闭事件的应用:

首先需求说明:在系统需要用js捕获关闭浏览器的事件,然后在捕获后对session中的一些数据(如利用某些字段更新数据库)进行一定的处理。然后关闭浏览器。这里注意window没有onclose事件, 标签只有onload\onunload\onbeforeunload事件,而没有onclose事件。不管页面是关闭还是刷新都会执行onunload事件。 

页面加载时只执行onload ,页面关闭时只执行onunload ,页面刷新时先执行onbeforeunload,然后onunload,最后onload。

这样我们可以在onbeforeunload中加一个标记,在onunload中判断该标记,即可达到判断页面是否真的关闭了。 

 

错误提示:我使用的是DWR方式处理,下面是错误的代码:

 //处理关闭浏览器带来的session失效
		window.onbeforeunload = onbeforeunload_handler;		 
		function onbeforeunload_handler(){		   
		     DwrSystemService.browserClose(function(data){
		       alert(data);
		       return;
		     });		     	      		      
		}

 

后台错误提示:
WARN - Exception while processing batch
java.lang.IllegalArgumentException: Failed to find parameter: scriptSessionId
	at org.directwebremoting.dwrp.Batch.extractParameter(Batch.java:91)
	at org.directwebremoting.dwrp.Batch.<init>(Batch.java:59)
	at org.directwebremoting.dwrp.CallBatch.<init>(CallBatch.java:46)
	at org.directwebremoting.dwrp.BaseCallHandler.handle(BaseCallHandler.java:72)
	at org.directwebremoting.servlet.UrlProcessor.handle(UrlProcessor.java:120)
	at org.directwebremoting.servlet.DwrServlet.doPost(DwrServlet.java:141)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
	at java.lang.Thread.run(Thread.java:619)
DEBUG - Refurbishing idle resources - Tue Aug 07 16

 经过网上查询:错误原因是:为了实现关闭浏览器的同时能够关闭用户的session,需要锁定session,不然你试图注销session,将会出现报错信息:    Failed to find parameter: scriptSessionId

session同步锁    dwr.engine.setAsync(false);

session异步锁    dwr.engine.setAsync(true);

 

dwr常用关键句

1、加载信息:

      dwr.util.useLoadingMessage();

2、设置同步(各版本有区别):

      DWREngine.setAsync(false); /dwr.engine.setAsync(false);

3、设置异步:

      DWREngine.setAsync(true);  /dwr.engine.setAsync(true);

最终解决办法:

          //关闭浏览器造成的session失效	
		window.onbeforeunload =session_handler;
		function session_handler(){		    
		    dwr.engine.setAsync(false); //
		     DwrSystemService.browserClose(function(data){
		      // alert(data);
		       return;
		     });
		  dwr.engine.setAsync(true);   	
		}
		window.onunload=function(){
             if(onbeforeunload.flag) return;
             //  alert('unload');
	     }

 

分享到:
评论
1 楼 1021082712 2014-01-28  
lz,总结的太到位了,最近正在做监视在线用户,这太受用了!!!

相关推荐

    DWR 取得回调函数返回值案列

    需要注意的是,虽然示例中使用了同步模式来简化获取返回值的过程,但在实际开发中应尽量避免使用同步模式,因为它会导致用户体验不佳。对于复杂的业务逻辑或大数据量传输场景,推荐采用异步模式处理。 通过以上内容...

    Dwr功能案例

    下面将详细介绍Dwr在传参、返回值以及JavaBean操作中的关键知识点。 1. **DWR的传参机制**: DWR支持多种类型的参数传递,包括基本类型(如int、String)、对象、数组、集合等。在客户端JavaScript中,你可以直接...

    DWR中文文档 (DWR 2.0)

    **8.4 从其他URL读取数据**:DWR不仅支持从本地服务器获取数据,还可以跨域调用其他服务器的服务。 **8.5 安全性**:DWR内置了一些安全措施来防止常见的攻击手段,但开发者还需要根据实际情况加强安全策略。 #### ...

    DWR与SPRING,DWR与STRUTS2的整合

    2. **结果映射**:在Struts2的配置文件中,可以定义结果类型来处理DWR调用后的返回值,比如将返回值渲染到页面上。 3. **拦截器**:利用Struts2的拦截器机制,可以在DWR调用前后添加额外的操作,如日志记录、性能...

    DWR 初始,返回字符串&对象&列表

    当你需要从服务器获取一组数据时,DWR可以通过返回列表来实现。比如,你可能有一个`getUsers()`方法,它返回一个`List&lt;User&gt;`。DWR会将这个列表转换为JavaScript数组,每个元素都是之前提到的`Person`对象的...

    dwr的使用返回json

    DWR的核心特性之一是它提供了与JavaScript交互的接口,使得前端可以调用后端的Java方法并获取返回值。在处理JSON数据时,DWR提供了自动序列化和反序列化机制,将Java对象转换为JSON字符串,然后传递给客户端,客户端...

    DWR调用及传参总结

    当Java方法返回List、Set或Map时,如`callTestMethod6`,返回的数据可以通过回调函数`callBackFortestMethod6`获取。如果列表元素是基本类型或特定复杂类型,无需在`dwr.xml`中特别声明。 7. **有List、Set或Map...

    dwr的用法解析

    - **缓存**:DWR提供缓存机制,对于相同的请求,可以从缓存中直接获取结果,提高性能。 - **安全性**:可以通过配置限制特定IP地址或用户访问,防止未授权的调用。 - **错误处理**:提供错误处理机制,当服务器端...

    dwr技术详解.doc

    2. **JavaScript库**:提供了一套API,使得开发者可以轻松地利用从服务器获取的数据更新网页内容。 DWR的一个创新之处在于它通过动态生成基于Java类的JavaScript代码,让JavaScript代码能直接调用服务器端的Java...

    实现 Dwr 服务器推送

    - 这些方法必须是public,并且没有void返回值,因为DWR默认不支持void类型的返回值。 3. **JavaScript接口** - DWR会自动生成对应的JavaScript接口,可以在HTML页面中直接使用。 - 使用`&lt;script src="/dwr/...

    dwr util.js

    - **异步通信**:`util.js`配合DWR的异步调用机制,使得服务器端的数据获取和处理更加实时。 总结,`util.js`作为DWR框架的一部分,为开发者提供了丰富的工具函数,极大地简化了前端开发工作,提高了开发效率。...

    DWR框架对各种类型方法调用的示例

    在"DWR框架对各种类型方法调用的示例"中,我们可以看到DWR是如何处理不同类型的参数和返回值的。以下是对这些示例的详细解析: 1. **无参方法调用**: 当你需要调用一个不接受任何参数的后台方法时,DWR提供了简便...

    DWR基础教程 开发案例

    1. **下载DWR库**:首先,需要从DWR官网获取dwr.jar包,并将其放入WEB-INF/lib目录。 2. **配置web.xml**:在web.xml中添加DWR的Servlet配置,包括servlet-name、servlet-class、init-param等,以启用调试模式。 3. ...

    extjs_dwr_grid 实例(含完整源码及说明)

    DWR 和 Ext 简单例子综合 EXT 2 和 DWR 1 表格编辑控件示例(无数据库版本) EXT 2 表格编辑控件示例(静态页面,与Java无关版本) Netbeans 6 开放文档团队在线通讯录(Ext...模拟DWR 引擎通过反射调用类中方法并获取返回值

    在DWR中实现直接获取一个JAVA类的返回值的两种方法

    ### 方法一:通过同步调用来获取返回值 这种方法首先将DWR引擎设置为同步模式,然后调用Java方法,并提供一个回调函数来处理返回的数据。在回调函数中,数据会被存储到一个变量中,最后再将DWR引擎设置回异步模式。...

    DWR中文文档.pdf

    - **使用webContext的方法**:通过`webContext`获取DWR所需的上下文信息。 - **方法选择**:根据应用场景选择合适的集成方式。 2. **DWR与Spring** - **让DWR和Spring一起工作的检查列表**:确保Spring容器能...

    DWR中文简介与用法

    `&lt;create&gt;` 标签指定了JavaScript中可访问的Java类以及DWR获取该类实例的方式,如使用默认构造函数(`creator="new"` )。`javascript` 属性定义了JavaScript代码中使用的对象名称。`&lt;include&gt;` 标签指定了要公开给...

    java的dwr的联级操作ajax

    在这个例子中,`data`是来自DWR Java方法的返回值,`renderTable`函数会创建一个表格并将其添加到文档中。 总结起来,Java的DWR技术使得在JSP环境中实现Ajax联级操作和表格动态更新变得容易。通过DWR,我们可以高效...

    DWR中文文档(pdf)

    **5.2 调用元数据对象**:通过调用元数据对象来获取服务器端方法的信息,以便客户端动态生成调用代码。 以上是对DWR中文文档的核心知识点概述,通过这些内容的学习,开发者可以快速掌握DWR的基本使用方法,并能够在...

Global site tag (gtag.js) - Google Analytics