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'); }
相关推荐
dwr调用带集合返回值的方法,dwr调用带集合返回值的方法
DWR 取得回调函数返回值案列DWR 取得回调函数返回值案列DWR 取得回调函数返回值案列
dwr对各种类型返回值的处理实例,简明易懂!
dwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwrdwr dwr
dwr包;dwr包;dwr包;dwr包;dwr包;dwr包;dwr包;dwr包;dwr包;dwr包;dwr包;dwr包;dwr包;dwr包;dwr包;dwr包;dwr包;dwr包;dwr包;dwr包;dwr包;dwr包;dwr包;dwr包;dwr包;dwr包;dwr包;
dwr 框架dwr 框架dwr 框架dwr 框架dwr 框架dwr 框架
dwr+spring 的消息发布小例子,增删改查都有,好东西要大家分享!
本项目实现了使用DWR框架实现二级联动,并且实现了从服务器端提取数据集(List),使用表格动态显示到页面上的无刷新效果
1、 导入dwr.jar包 2、 在web.xml中配置dwr,如下: <!-- 配置DWR --> <servlet-name>dwr-invoker org.directwebremoting.servlet.DwrServlet <init-param> <param-name>debug</param-name> ...
本项目实现了使用DWR框架实现二级联动,并且实现了从服务器端提取数据集(list),使用表格动态显示到页面上的无刷新效果。附带两个验证码Servlet类(供相关项目参考),附带数据库
dwr中文文档dwr中文文档dwr中文文档dwr中文文档dwr中文文档dwr中文文档dwr中文文档
DWR中文文档DWR中文文档DWR中文文档DWR中文文档DWR中文文档
dwr源码
dwr笔记 dwr自学资料 dwr笔记 dwr自学资料 dwr笔记 dwr自学资料
DWR(Direct Web Remoting)是一个web远程调用框架,利用这个框架可以让AJAX变得很简单,通过DWR可以在客户端通过JavaScript直接调用服务器的Java方法并返回值给JavaScript,整个过程就好像通过本地客户端调用一样,...
利用DWR可以在客户端利用JavaScript直接调用服务端的Java方法并返回值给JavaScript就好像直接本地客户端调用一样(DWR根据Java类来动态生成JavaScrip代码).它的最新版本DWR0.6添加许多特性如:支持Dom Trees的自动配置...
Dwr入门操作手册Dwr入门操作手册Dwr入门操作手册Dwr入门操作手册Dwr入门操作手册Dwr入门操作手册Dwr入门操作手册Dwr入门操作手册Dwr入门操作手册Dwr入门操作手册Dwr入门操作手册Dwr入门操作手册Dwr入门操作手册Dwr...
自己做的一个dwr实例,dwr用着很方便,真是不错
dwr包.rar dwr.jar engine.js util.js dwr-noncla.jar readme.txt JAR File: dwr.jar (1.08Mb) To DWR enable your web-app WAR File: dwr.war (4.62Mb) Demos/Examples of what DWR can do Sources: dwr-...
DWR配置文件详解 DWR配置 DWR配置文件