dwr 发送给指定用户问题
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
大家帮帮忙啊,项目紧,纠结了好几天了,快疯了!