本人按照网上的demo写了一个dwr给指定人员发送信息的程序,但奇怪的问题是在对比人员id的时候,即使id不相等的用户也会受到信息,纠结了好几天,还是没有解决。
代码部分:
1,java类
---------------------
public class TestMsg {
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>