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在传参、返回值以及JavaBean操作中的关键知识点。 1. **DWR的传参机制**: DWR支持多种类型的参数传递,包括基本类型(如int、String)、对象、数组、集合等。在客户端JavaScript中,你可以直接...
**8.4 从其他URL读取数据**:DWR不仅支持从本地服务器获取数据,还可以跨域调用其他服务器的服务。 **8.5 安全性**:DWR内置了一些安全措施来防止常见的攻击手段,但开发者还需要根据实际情况加强安全策略。 #### ...
2. **结果映射**:在Struts2的配置文件中,可以定义结果类型来处理DWR调用后的返回值,比如将返回值渲染到页面上。 3. **拦截器**:利用Struts2的拦截器机制,可以在DWR调用前后添加额外的操作,如日志记录、性能...
当你需要从服务器获取一组数据时,DWR可以通过返回列表来实现。比如,你可能有一个`getUsers()`方法,它返回一个`List<User>`。DWR会将这个列表转换为JavaScript数组,每个元素都是之前提到的`Person`对象的...
DWR的核心特性之一是它提供了与JavaScript交互的接口,使得前端可以调用后端的Java方法并获取返回值。在处理JSON数据时,DWR提供了自动序列化和反序列化机制,将Java对象转换为JSON字符串,然后传递给客户端,客户端...
当Java方法返回List、Set或Map时,如`callTestMethod6`,返回的数据可以通过回调函数`callBackFortestMethod6`获取。如果列表元素是基本类型或特定复杂类型,无需在`dwr.xml`中特别声明。 7. **有List、Set或Map...
- **缓存**:DWR提供缓存机制,对于相同的请求,可以从缓存中直接获取结果,提高性能。 - **安全性**:可以通过配置限制特定IP地址或用户访问,防止未授权的调用。 - **错误处理**:提供错误处理机制,当服务器端...
2. **JavaScript库**:提供了一套API,使得开发者可以轻松地利用从服务器获取的数据更新网页内容。 DWR的一个创新之处在于它通过动态生成基于Java类的JavaScript代码,让JavaScript代码能直接调用服务器端的Java...
- 这些方法必须是public,并且没有void返回值,因为DWR默认不支持void类型的返回值。 3. **JavaScript接口** - DWR会自动生成对应的JavaScript接口,可以在HTML页面中直接使用。 - 使用`<script src="/dwr/...
- **异步通信**:`util.js`配合DWR的异步调用机制,使得服务器端的数据获取和处理更加实时。 总结,`util.js`作为DWR框架的一部分,为开发者提供了丰富的工具函数,极大地简化了前端开发工作,提高了开发效率。...
在"DWR框架对各种类型方法调用的示例"中,我们可以看到DWR是如何处理不同类型的参数和返回值的。以下是对这些示例的详细解析: 1. **无参方法调用**: 当你需要调用一个不接受任何参数的后台方法时,DWR提供了简便...
1. **下载DWR库**:首先,需要从DWR官网获取dwr.jar包,并将其放入WEB-INF/lib目录。 2. **配置web.xml**:在web.xml中添加DWR的Servlet配置,包括servlet-name、servlet-class、init-param等,以启用调试模式。 3. ...
DWR 和 Ext 简单例子综合 EXT 2 和 DWR 1 表格编辑控件示例(无数据库版本) EXT 2 表格编辑控件示例(静态页面,与Java无关版本) Netbeans 6 开放文档团队在线通讯录(Ext...模拟DWR 引擎通过反射调用类中方法并获取返回值
### 方法一:通过同步调用来获取返回值 这种方法首先将DWR引擎设置为同步模式,然后调用Java方法,并提供一个回调函数来处理返回的数据。在回调函数中,数据会被存储到一个变量中,最后再将DWR引擎设置回异步模式。...
- **使用webContext的方法**:通过`webContext`获取DWR所需的上下文信息。 - **方法选择**:根据应用场景选择合适的集成方式。 2. **DWR与Spring** - **让DWR和Spring一起工作的检查列表**:确保Spring容器能...
`<create>` 标签指定了JavaScript中可访问的Java类以及DWR获取该类实例的方式,如使用默认构造函数(`creator="new"` )。`javascript` 属性定义了JavaScript代码中使用的对象名称。`<include>` 标签指定了要公开给...
在这个例子中,`data`是来自DWR Java方法的返回值,`renderTable`函数会创建一个表格并将其添加到文档中。 总结起来,Java的DWR技术使得在JSP环境中实现Ajax联级操作和表格动态更新变得容易。通过DWR,我们可以高效...
**5.2 调用元数据对象**:通过调用元数据对象来获取服务器端方法的信息,以便客户端动态生成调用代码。 以上是对DWR中文文档的核心知识点概述,通过这些内容的学习,开发者可以快速掌握DWR的基本使用方法,并能够在...