dwr 发送给指定用户问题

wodehongseupan 2014-03-30 12:23:26
dwr 发送给指定用户问题



本人按照网上的demo写了一个dwr给指定人员发送信息的程序,但奇怪的问题是在对比人员id的时候,即使id不相等的用户也会受到信息,纠结了好几天,还是没有解决。

代码部分:

1,java类
---------------------
public class Msg{

public void sendMsg(String userid,String message){
final String userId = userid;
final String autoMessage = message;
//过滤器
ScriptSessionFilter filter = new ScriptSessionFilter() {
public boolean match(ScriptSession scriptSession) {
String tag = (String)scriptSession.getAttribute("userId" );
System. out.println(tag);
System.out.println("userId.equals(tag)="+userId.equals(tag));
return userId.equals(tag);
}
};
Runnable run = new Runnable(){
private ScriptBuffer script = new ScriptBuffer();
public void run() {
//设置要调用的 js及参数
System.out.println("----------------run----------------");
script.appendCall( "showMessage", autoMessage);
//得到所有ScriptSession
Collection<ScriptSession> sessions = DWRScriptSessionListener.getScriptSessions();
//遍历每一个ScriptSession
for (ScriptSession scriptSession : sessions){
System.out.println("for (ScriptSession scriptSession : sessions)");
scriptSession.addScript( script);
}
}
};
//执行推送
System.out.println("--------推送开始--------");
Browser.withAllSessionsFiltered(filter, run); //注意这里调用了有filter功能的方法
System.out.println("--------推送结束--------");
}

public void saveid(String userId){
try{
// HttpServletRequest request = ServletActionContext.getRequest();
//request.getSession().setAttribute("userId", userId);
ScriptSession scriptSession = WebContextFactory.get().getScriptSession();
scriptSession.setAttribute("userId", userId);
}catch(Exception e){
e.printStackTrace();
}
}

2,发送端
-----------------------
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script type="text/javascript" src="dwr/util.js"></script>
<script type="text/javascript" src="dwr/engine.js"></script>
<script type="text/javascript" src="dwr/interface/SendMsg.js"></script>
<script type="text/javascript" src="js/jquery-1.7.2.min.js"></script>
<script type="text/javascript">
$(function(){
dwr.engine.setActiveReverseAjax(true);
dwr.engine.setNotifyServerOnPageUnload(true);
$("#but").click(function(){
SendMsg.sendMsg('11',$("#msg").val());
});
});

function showMessage(autoMessage){
$("#message").text(autoMessage);
}
</script>
<title>Insert title here</title>
</head>
<body>
<input type="text" id="msg" />
<input type="button" value="发送“ id="but" />
<div id="message" style="width: 200px;height: 200px;border: 1px solid red ; text-align: center; padding: 5px;"></div>
</body>
</html>


3,接收端
---------------------------
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%

String userId = request.getParameter("userId");
%>
<!DOCTYPE HTML>
<html>
<head>
<title>showMsg1</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script type="text/javascript" src="dwr/util.js"></script>
<script type="text/javascript" src="dwr/engine.js"></script>
<script type="text/javascript" src="dwr/interface/SendMsg.js"></script>
<script type="text/javascript" src="js/jquery-1.7.2.min.js"></script>
<script type="text/javascript">
$(function(){
//表示允许使用推送技术
//这个方法用来启动该页面的ReverseAjax功能
dwr.engine.setActiveReverseAjax(true);
//设置在页面关闭时,通知服务端销毁会话
dwr.engine.setNotifyServerOnPageUnload(true);
});
//通过该方法与后台交互,确保推送时能找到指定用户
function onPageLoad(){
var userId = '<%=userId%>';
SendMsg.saveid(userId);
}
//推送信息
function showMessage(autoMessage){
$("#message").text(autoMessage);
}

</script>
<title>Insert title here</title>
</head>
<body onload="onPageLoad();">
<div id="message" style="width: 200px;height: 200px;border: 1px solid red ; text-align: center; padding: 5px;"></div>
</body>
</html>


注:接收端通过不同userId进行测试,发送端发送的userId是11


大家帮帮忙啊,项目紧,纠结了好几天了,快疯了!
...全文
39 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

5,655

社区成员

发帖
与我相关
我的任务
社区描述
Web开发应用服务器相关讨论专区
社区管理员
  • 应用服务器社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧