dwr的ScriptSession问题,在线等!
初学dwr ,做了个聊天的例子,用的dwr反转,但是现在出问题了!!
不知问题所在,贴码:
/** 保存当前在线用户列表 */
	public static List<UserMessageVo> users = new ArrayList<UserMessageVo>();
	public String updateUsersList(String systemid, boolean flag, HttpServletRequest request) {		
		UserMessageVo user = new UserMessageVo();   
		user.setSystemid(systemid);
		users.add(user);
			//将用户id和页面脚本session绑定
			this.setScriptSessionFlag(systemid);
			System.out.println("::::::::sriprt:::::"+WebContextFactory.get().getScriptSession().getAttribute("userid"));			
	//获得DWR上下文
		ServletContext sc = request.getSession().getServletContext();
		System.out.println(sc);
		ServerContext sctx = ServerContextFactory.get(sc);
		System.out.println(sctx);
		//获得当前浏览页面的所有脚本session
		Collection sessions = sctx.getScriptSessionsByPage("/people/message/send.jsp");
		System.out.println("页面脚本的session数量"+sessions.size());
		//处理这些页面中的一些元素
		//Util util = new Util(pages);					
		return systemid;
	}     		
	/**
	 * 将用户id和页面脚本session绑定
	 * @param userid
	 */
	public void setScriptSessionFlag(String userid) {		
		System.out.println("登陆者的id"+userid);		
		WebContextFactory.get().getScriptSession().setAttribute("userid", userid);		
		}
/**
	 * 根据用户id获得指定用户的页面脚本session
	 * @param userid
	 * @param request
	 * ScriptSession不同,第一次访问,会创建一个ScriptSession,但是,如果你刷新,就会创建一个新的ScriptSession
	 * @return  
	 */
	@SuppressWarnings("unchecked")
	public ScriptSession getScriptSession(String userid, HttpServletRequest request) {
		ScriptSession scriptSessions = null;
		Collection<ScriptSession> sessions = new HashSet<ScriptSession>();		
		sessions.addAll(ServerContextFactory.get(request.getSession().getServletContext())
				.getScriptSessionsByPage("/people/message/send.jsp"));
		for (ScriptSession session : sessions) {
			String xuserid = (String) session.getAttribute("userid");
			if (xuserid != null && xuserid.equals(userid)) {
				scriptSessions = session;
			}
		}
		return scriptSessions;
	}	
	/**
	 * 发送消息
	 * @param sender 发送者
	 * @param receiverid 接收者id
	 * @param msg 消息内容
	 * @param request
	 */
	public void send(String senderUsername,String receiverId,String messageContent,String sendTime,HttpServletRequest request)
	{		
		System.out.println("::::::::::"+senderUsername);
		System.out.println("::::::::::"+receiverId);
		System.out.println("::::::::::"+messageContent);
		System.out.println("::::::::"+sendTime);
		try
		{
			ScriptSession session = this.getScriptSession(receiverId, request);
			Util util = new Util(session);
			util.setValue("sender", "kaka");
			/*util.setStyle("backMessage", "display", "");
			util.setValue("sender", "kaka");
			util.setValue("msg", messageContent);*/
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}				
	}
我现在测试session 总是空的,在发送页面没有值,是什么原因呢,求高人指点
------解决方案--------------------不懂,up
------解决方案--------------------
1、一个页面会产生一个新的scriptSession。所以当你刷新当前页面就会产生一个新的scriptSession。而这个scriptSession是唯一通信的通道。
2、如果同一页面有多个scriptsession 那么其session肯定获取不到。
3、放到map中判断,确保一个页面有个session存在。
------解决方案--------------------楼上的可以参考,但是我感觉楼主因该修改下思路,dwr仅仅用来异步显示和刷新名单信息就可以了,不要在