问题:
用dwr技术查询海量数据时,用户点击按钮,提交请求后,页面长时间没反应.问题反映到我这.当然除了要提高性能外,也得给用户一个提示,比如出现"正在加载数据.."的提示.
解决办法:
如果要实现这种效果,就得在客户端用js判断加载情况,请求前是一种状态,请求后(后台处理,返回数据给前台)又是一种状态.
dwr工具包提供了两个函数,专门处理这两种情况:
(1) 请求前处理
DWREngine.setPreHook(jsfun)
在DWR调用之前设置执行一个函数(但是这个函数无参数),例如显示"正在加载数据.."信息
(2)请求后处理
DWREngine.setPostHook(jsfun) 在DWR调用之后要执行的函数.例如隐藏"正在加载数据.."信息
DWREngine.setPreHook(jsfun)在调用DWR之前,运行jsfun函数。DWREngine.setPostHook(jsfun)在调用完DWR后,运行jsfun函数。
当然我们可以用它来显示程序运行时的动画效果.
//====================================================================
//显示文字提示消息
function useLoadingMessage(message) {
var loadingMessage;
if (message) loadingMessage = message;
else loadingMessage = "Loading";
DWREngine.setPreHook(function() {
var disabledZone = $('disabledZone');
if (!disabledZone) {
disabledZone = document.createElement('div');
disabledZone.setAttribute('id', 'disabledZone');
disabledZone.style.position = "absolute";
disabledZone.style.zIndex = "1000";
disabledZone.style.left = "0px";
disabledZone.style.top = "0px";
disabledZone.style.width = "100%";
disabledZone.style.height = "100%";
document.body.appendChild(disabledZone);
var messageZone = document.createElement('div');
messageZone.setAttribute('id', 'messageZone');
messageZone.style.position = "absolute";
messageZone.style.top = "0px";
messageZone.style.right = "0px";
messageZone.style.background = "red";
messageZone.style.color = "white";
messageZone.style.fontFamily = "Arial,Helvetica,sans-serif";
messageZone.style.padding = "4px";
disabledZone.appendChild(messageZone);
var text = document.createTextNode(loadingMessage);
messageZone.appendChild(text);
}
else {
$('messageZone').innerHTML = loadingMessage;
disabledZone.style.visibility = 'visible';
}
});
DWREngine.setPostHook(function() {
$('disabledZone').style.visibility = 'hidden';
});
}
//====================================================================
//用图片显示动态效果
function useLoadingImage(imageSrc) {
var loadingImage;
if (imageSrc) loadingImage = imageSrc;
else loadingImage = "ajax-loader.gif";
DWREngine.setPreHook(function() {
var disabledImageZone = $('disabledImageZone');
if (!disabledImageZone) {
disabledImageZone = document.createElement('div');
disabledImageZone.setAttribute('id', 'disabledImageZone');
disabledImageZone.style.position = "absolute";
disabledImageZone.style.zIndex = "1000";
disabledImageZone.style.left = "0px";
disabledImageZone.style.top = "0px";
disabledImageZone.style.width = "100%";
disabledImageZone.style.height = "100%";
var imageZone = document.createElement('img');
imageZone.setAttribute('id','imageZone');
imageZone.setAttribute('src',imageSrc);
imageZone.style.position = "absolute";
imageZone.style.top = "0px";
imageZone.style.right = "0px";
disabledImageZone.appendChild(imageZone);
document.body.appendChild(disabledImageZone);
}
else {
$('imageZone').src = imageSrc;
disabledImageZone.style.visibility = 'visible';
}
});
DWREngine.setPostHook(function() {
$('disabledImageZone').style.visibility = 'hidden';
});
}
分享到:
相关推荐
通过在客户端使用JavaScript配合DWR提供的API,我们可以优雅地处理加载状态,确保用户在整个过程中都有良好的感知。这种优化对于现代Web应用来说至关重要,因为它直接影响到用户对应用程序的满意度和使用体验。
在你提供的实例中,“dwr实例,从后台取数据显示”表明这是一个使用DWR从服务器获取数据并在前端展示的简单应用。 1. **DWR的工作原理**:DWR通过在服务器上设置一个代理,允许JavaScript调用Java方法,就像它们是...
1. **数据动态加载**:在需要频繁与服务器交互的数据密集型应用中,DWR可以显著提高页面加载速度。 2. **实时通信**:如在线聊天、股票行情等需要实时获取数据的应用场景。 3. **表单验证**:在表单提交前进行服务器...
在这个例子中,`startListening`函数开启了一个DWR长连接,每隔5秒向服务器发送一次心跳请求,服务器在有新数据时会调用`getNewData`的回调函数,更新页面上的数据显示。 总结来说,DWR长连接是实现Ajax实时通信的...
总的来说,Ajax和DWR框架的结合使用,可以显著提升Web应用的用户体验,减少不必要的页面刷新,提高数据处理效率。同时,通过DWR与主流Java框架的集成,开发者可以更方便地在大型项目中引入Ajax技术,而不必重构大量...
通过在客户端(浏览器)上使用DWR JavaScript库,可以方便地调用服务器端的Java方法,将数据动态地返回到网页上。这种方式使得用户可以在不重新加载整个页面的情况下更新部分内容,实现了无刷新的效果。 要使用DWR...
DWR(Direct Web Remoting)是一种Java技术,用于在Web应用程序中实现实时的客户端-服务器通信。它允许JavaScript在浏览器端直接调用服务器端的Java方法,从而创建动态、交互式的用户界面,而无需传统的HTTP请求。在...
6. **维持会话状态**:为了确保在用户浏览不同页面时仍能接收到推送,需要使用DWR的`scriptSession`来保持连接,并在页面间传递会话信息。每次页面加载或刷新时,需要重新初始化`scriptSession`。 7. **实现推送...
4. **编写JavaScript代码**:在页面加载完成后,使用DWR调用Java方法获取复选框的初始状态,然后监听用户的复选操作,当用户更改复选框状态时,通过DWR调用`setCheckedStatus`更新服务器端。 5. **更新页面显示**:...
标签"**无刷新**"表明了这个示例的核心特性,即在数据更新时,页面不会重新加载。这提高了用户体验,因为用户可以连续接收信息,而不会被打断。 标签"**推送**"强调了DWR在这个场景中的作用,即它负责从服务器向...
分页是一种常见的网页功能,它帮助用户更好地管理和浏览大量数据,避免一次性加载过多内容导致页面响应慢或资源浪费。 首先,让我们来看看Struts2.0的分页。在Struts2中,我们可以使用第三方库如DisplayTag或者...
Ajax(Asynchronous JavaScript and XML)是一种用于创建动态网页的技术,通过在后台与服务器进行少量数据交换,实现局部更新网页内容,从而提升了用户体验。Ajax技术并不是单一的技术,而是多种技术的组合运用,...
Ajax全称为"Asynchronous JavaScript and XML",是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。DWR(Direct Web Remoting)是一个开源JavaScript库,它使得在浏览器端可以直接调用服务器端的Java...
1. **前端准备**:在HTML页面中,创建一个表格元素,并使用JavaScript(可能是jQuery或其他库)绑定DWR事件,如`dwr.util.useLoadingMessage`来显示加载状态。 2. **DWR配置**:在服务器端,配置DWR引擎,指定哪些...
在本文中,我们将深入探讨如何使用Ext Grid与Direct Web Remoting (DWR)技术结合,实现一个具有分页功能的列表展示。首先,让我们逐一了解这些关键组件。 1. **Ext Grid**: Ext Grid是Ext JS库中的核心组件,用于...
标题中的"Dwr无刷新分页.rar"指的是使用Direct Web Remoting (DWR)技术实现的网页分页功能,且该功能无需用户手动刷新页面。DWR是一种JavaScript库,它允许Web应用程序在客户端与服务器之间进行实时通信,实现了AJAX...
DWR(Direct Web Remoting)是一种JavaScript和Java之间的远程调用技术,它允许Web应用程序在浏览器和服务器之间进行实时的、低延迟的数据交换,极大地增强了用户体验。DWR的核心特性之一就是支持长连接,这使得Web...
【标题】: 使用DWR的Comet推送技术创建多人聊天室 【描述】: 本文主要探讨如何通过Spring与Direct Web Remoting (DWR)框架的整合,利用Comet技术来构建一个无需刷新页面的多人在线聊天室。Comet是一种实现服务器到...
【标题】:“jsp j2ee dwr ajax dwr登陆”这一主题涉及的是在Web开发中使用Java Server Pages (JSP)、Java 2 Platform, Enterprise Edition (J2EE)、Direct Web Remoting (DWR)以及Asynchronous JavaScript and XML ...
Ajax允许网页在不重新加载整个页面的情况下与服务器进行异步通信。它通过JavaScript创建XMLHttpRequest对象,向后台发送请求,获取响应数据,并在前端更新特定部分。这样,用户可以继续在其他部分操作,而不受后台...