近日在使用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的问题我随后再附上内容
相关推荐
用dwr3实现推送功能,文件就是该实现代码
实现 Dwr 服务器推送实现 Dwr 服务器推送实现 Dwr 服务器推送实现 Dwr 服务器推送实现 Dwr 服务器推送
使用dwr+spring实现消息推送 。
dwr消息推送功能。可以实现实时消息推送
该文档介绍了dwr实现消息推送的具体步骤,希望对大家有所帮助,若有不明白的地方,可以给我发消息,小弟能解答的一定解答。
本实例是在一些网络资料的基础上整合出来的一个:以后台向前台页面推送消息的一个完整实例工程,采用了spring、dwr反转,实现的是后台向前台不断推送消息,并管理相关用户退出;可以用在如定时任务的桌面消息提醒之...
使用DWR实现服务器端向客户端精确推送消息
springMVC+dwr技术实现消息推送实例,简单实例演示如何用dwr实现后台向前台主动推送消息
包含了dwr推送技术的详细介绍 和 一个基于dwr推送技术的聊天实例
springMvc + dwr 注解 实现消息推送 ,支持单个用户精确推送以及指定成员.群推送. 不需要任何配置修改,即可使用
学习两天,项目中做一个反向推送功能,功能比较简单,但是比较实用。要是项目中集成的话直接修改一下包路径 就行了。推送是session做的。可以用用户ID的。
dwr的反转ajax,实现服务器推送数据。
Dwr推送技术实现BS即时通讯,项目源代码,功能实现
dwr3,推送消息,指定用户推送demo
干货无需多扯,由于项目需求采用dwr3.0实现消息精准推送,以及JS调用后台Java函。Demo中有详细注释
使用DWR框架实现服务器器消息推送,本例以登录为例供大家参考学习:client与service建立一个长连接,不用client手动request,service会自动response,当有好友在线的时候,会自动把好友的信息加载到select里,点击...
dwr实现前台监控 后台推送即时信息 入门必看资料 里边含源码;
DWR消息推送简单实例。maven工程。
dwr实现精确推送源码
实现Comet消息推送功能,根据登陆人定向推送,解决刷新页面原有ScriptSession不能及时销毁的问题,DEMO比较简陋,请先进入login.jsp页面登陆。根据登陆名称判断推送目标,可登陆多个用户进行测试。