近日在使用DWR框架做一个网页即时推送消息的功能,遇到了两个问题
(1)推送后只有第一次是有用的,必须刷新一次页面之后才可继续用,然后继续刷新。。。(网上查了一些信息,说是用map管理scriptSession,避免新生成多余scriptiSession)
(2)我在推送信息时传了两个角色的ID,但是消息显示的时候不仅推送给那两个角色,我当前登录角色也会马上收到推送信息。
以上两点请帮忙想一下如何解决
下面是我的部分代码:
首先是java代码:
public class PublishMessage {
private UserService userService = AppCtxUtil.getBean(UserService.class);
private PrescriptionConfirmService prescriptionConfirmService = AppCtxUtil
.getBean(PrescriptionConfirmService.class);
// 总部药师向门店推送
public String publishMessageToStore(String message, String recordId) {
String applicant = "";
try {
// 取到所有角色为药师的ID
Conds conds = new Conds();
conds.equal("S_ID", recordId);
PrescriptionConfirm prescriptionConfirm = prescriptionConfirmService.fetchById(recordId);
if (prescriptionConfirm != null) {
applicant = prescriptionConfirm.getUserName() + ",";
String userOrgan = userService.fetchById(applicant.substring(0, applicant.length() - 1)).getOrgan();
Conds uConds = new Conds();
uConds.equal("U.S_ORGAN", userOrgan);
uConds.equal("r.s_rolename", "PHARM_STORE");
List<User> userList = userService.fetchUserRoleByPage(uConds, null, 0, 0);
if (userList != null) {
int userSum = userList.size();
if (userSum == 1) {
User user = userList.get(0);
applicant += user.getId() + ",";
}
}
applicant = applicant.substring(0, applicant.length() - 1);
}
// 推送网页脚本
WebContext wctx = WebContextFactory.get();
ScriptBuffer script = new ScriptBuffer();
script.appendScript("receiveMessagesFromHQ(" + "\"" + message + "\"," + "\"" + applicant + "\"" + ");");
ServerContext sctx = ServerContextFactory.get(wctx.getServletContext());
String contextPath = wctx.getHttpServletRequest().getContextPath();
Collection<ScriptSession> pages = sctx.getAllScriptSessions();
for (ScriptSession session : pages) {
session.addScript(script);
}
} catch (Exception e) {
return "fail";
}
return applicant;
}
}
其次是HTML代码(HTML代码有点多,就贴了部分哈):
$.ajax({
url : "/passPrescription" + "?time=" + $.now(),
type : "put",
data : {
id : id,
remark : remark
},
success : function(obj) {
if (null != obj) {
if (obj.result == 'OK') {
alert("审核通过");
$(".main_div").load(
"/prescriptionConfirmList/1" + "/" + "id" + "?time="
+ $.now());
//发布消息
var message = "处方申请:"+id+"已通过审核,请及时复核!";
var recordId = id;
messageAjax.publishMessageToStore(message,recordId,{callback:function(data){
//alert(data);
if(data=='fail'){
alert("消息发布失败!");
}else{
if(data==''){
alert("通知信息发送失败!");
}else{
alert("已通知申请门店进行复核!");
}
}
}});
} else {
alert(obj.body);
}
}
}
});
web.xml和dwr.xml是在网上照抄的,名字什么对应没问题,如果是这两个XML的问题我随后再附上内容
相关推荐
本篇文章将详细讲解如何利用DWR 3实现推送功能。 1. **DWR 3 的基本概念** DWR 3 提供了一种安全、高效的机制,使得JavaScript可以调用Java方法,并将结果返回到页面上。这种机制是基于HTTP的异步请求,因此无需...
这个"**dwr demo 反向推送 导向推送**"是一个示例项目,展示了如何利用DWR来实现反向推送技术,也称为服务器推送。这种技术允许服务器主动地将数据推送到客户端,而不需要客户端不断地发起请求。 在传统的HTTP协议...
总的来说,结合DWR和Spring,我们可以构建出一个高效、可扩展的消息推送系统,使得Web应用能够实时地与用户互动,提升用户体验。在实际项目中,还需要考虑安全性、错误处理、性能监控等方面,确保系统的稳定性和可靠...
DWR提供了一个`keepAlive`方法来实现这个功能。 四、优化与注意事项 - 考虑到性能和资源消耗,合理设置心跳间隔和推送数据的大小。 - 对于大量用户,可能需要考虑负载均衡和连接池管理。 - 由于浏览器兼容性和安全...
本篇文章将详细介绍如何利用DWR实现消息的精确推送功能。 #### 二、准备工作 在开始实现之前,我们需要做好以下几项准备工作: 1. **引入DWR库**:首先确保项目中已经包含了`dwr.jar`文件。 2. **配置web.xml**:...
在“DWR3实现服务器端向客户端精确推送消息”这一主题中,我们将深入探讨如何利用DWR3进行服务器到客户端的消息推送,以及这种技术的优势和应用。 首先,理解DWR3的工作原理是至关重要的。DWR3通过建立一个安全的...
DWR的主要功能之一是推送技术,这使得服务器可以主动向客户端发送数据,而不仅仅是响应客户端的请求。这种能力在创建实时更新的应用程序,如聊天应用,股票报价或者在线游戏时非常有用。 DWR推送技术的核心在于其...
### dwr消息推送功能 Direct Web Remoting (DWR) 是一种开源框架,它简化了JavaScript与服务器端Java代码之间的交互。DWR 提供了一种简单的方法来将 Java 对象暴露给 JavaScript,允许 JavaScript 调用 Java 方法,...
本实例是在一些网络资料的基础上整合出来的一个:以后台向前台页面推送消息的一个完整实例工程,采用了spring、dwr反转,实现的是后台向前台不断推送消息,并管理相关用户退出;可以用在如定时任务的桌面消息提醒之...
通过这个实例,你可以了解到如何利用SpringMVC处理业务逻辑,以及如何借助DWR实现从服务器到客户端的实时消息推送。理解这两个技术的结合,对于构建现代、交互性强的Web应用是非常有价值的。同时,这也是对传统HTTP...
DWR的推技术则解决了这个问题,它允许服务器在数据更新时立即推送到客户端,从而实现更实时、更高效的用户体验。 DWR的工作原理是通过在服务器端创建一个Java对象,这个对象暴露了若干方法供客户端JavaScript调用。...
通过研究这些文件,你可以更深入地理解DWR3如何实现推送消息,并在自己的项目中应用这一技术。 总的来说,DWR3的推送消息功能是实现Web应用实时性的有效手段,它通过持久化的HTTP连接实现了服务器到客户端的数据推...
总结起来,这个主题涵盖了使用DWR进行JavaScript与Java后台交互的基本步骤,以及利用DWR的Push功能实现消息精准推送。通过研究提供的Demo,你将能够理解和应用这些技术到自己的项目中,提高Web应用的交互性和实时性...
本项目结合了Spring MVC和Direct Web Remoting (DWR)框架,利用注解的方式实现了一种高效的消息推送机制,支持对单个用户进行精确推送以及向指定成员或群组发送消息。无需额外的配置修改,极大地简化了开发流程。 ...
DWR(Direct Web Remoting...综上所述,这个"DWR消息推送简单实例"涵盖了DWR框架的基础使用、Maven工程的构建以及消息推送的实现。通过学习这个实例,开发者可以更好地理解如何在实际项目中利用DWR实现高效的双向通信。
DWR(Direct Web Remoting)则是一个允许JavaScript和Java在浏览器与服务器之间进行实时通信的库,常用于实现Ajax应用中的数据推送。 在"struts2增删改查+dwr消息推送"的项目中,开发者会首先集成Struts2框架,通过...
在这个“dwr消息推送完整示例”中,我们将深入探讨如何利用DWR实现实时的消息推送功能。 **一、DWR基础** 1. **安装与配置** 在开始之前,确保你的项目中已经包含了DWR的JAR文件。将它们添加到项目的类路径中,并...
在这个入门资料中,我们将深入探讨如何使用DWR来实现前台监控和后台即时信息推送。 首先,我们需要了解DWR的基本概念。DWR的核心是通过创建一个代理,这个代理可以调用服务器上的Java方法,并将结果返回到客户端。...
要实现这个功能,我们首先需要理解DWR3的核心概念和工作原理。 1. **DWR配置**: - 在项目中添加DWR3的依赖库,这通常通过Maven或Gradle来完成。 - 配置DWR的`dwr.xml`文件,声明允许浏览器访问的Java类和方法。...
在`dwr3实现消息精确推送详细步骤 - jsczxy2 - ITeye技术网站_files`这个文件夹中,可能包含了示例代码和教程的详细步骤。这些资源可以辅助理解每个阶段的具体操作。 10. **最佳实践** 实现消息推送时,要考虑...