Code Bye

DWR3 推消息到页面,推不过去….

 
String page="/Test/frame/top.jsp";
Browser.withPage(page,new Runnable(){
   public void run(){
     System.out.println("---------------------------------------");//调试时程序未打印此句。
     ScriptSessions.addFunctionCall("test");//top.jsp 页面上的js 方法
   }
}
);

web.xml文件中我加了activeReverseAjaxEnabled 设为true
top.jsp   onload时也加dwr.engine.setActiveReverseAjax(true);

郁闷的是我debug调试时上面输出的那句话没有打印。
才开始看推,希望高手讲解一下。。谢谢。。

自己顶!

80分
新版本的API此处有Bug 、 使用旧API。
// 获得WEB上下文
		WebContext wctx = WebContextFactory.get();
		// 向指定页面推送消息
		Collection sessions = wctx.getScriptSessionsByPage("/ichat/pages/main/show_msg.jsp");
		Util utilAll = new Util(sessions);
		utilAll.addFunctionCall("callBack", messages);
还搞不定给我留言,给你个例子。
引用 3 楼 sotom 的回复:

还搞不定给我留言,给你个例子。

别留了,不给了,告诉你的足够解决问题,学习阶段不应该偷懒地,呵呵~~ 

非常感谢(木子)的回答。这旧的API我也试过WebContext wctx = WebContextFactory.get();
wctx=null;
我用ServerContextFactory.get(context);这种也不行。
引用 5 楼 xiajunsongfang 的回复:

非常感谢(木子)的回答。这旧的API我也试过WebContext wctx = WebContextFactory.get();
wctx=null;
我用ServerContextFactory.get(context);这种也不行。

这种方法是绝对可以的, 你没有配全,上个IM项目就是这种方式做的

/**
	 * 更新在线用户列表
	 * 
	 * @param request
	 */
	public void updateUsersList(HttpServletRequest request) {
		User user = null;
		String flag = "0";// 标识用户,0:不存在 1:已存在
		String name = request.getSession().getAttribute("uname").toString();
		String pwd = request.getSession().getAttribute("pwd").toString();
		System.out.println("用户ID=" + name + "   用户密码=" + pwd);
		user = new User(pwd, name);
		// 保存用户到列表
		// 如果列表中无任何用户则添加,否则循环查找列表中是否已存在该用户,
		// 如果不存在,则添加。如果存在,则不添加
		if (users.size() == 0) {
			users.add(user);
		} else {
			for (int i = 0; i < users.size(); i++) {
				User us = (User) users.get(i);
				if (us.getUsername().equals(name)) {
					flag = "1";
					break;
				}
			}
			if (flag.equals("0")) {
				users.add(user);
			}
		}

		/*
		 * //统计在线人数 long count=OnlineCounter.getOnline();
		 * 
		 * StringBuffer sb=new StringBuffer(); sb.append("<script
		 * language=""JavaScript"" defer=""defer"">"); sb.append("d = new
		 * dTree(\""d\"");"); sb.append("d.add(0,-1,""在线用户列表(当前"+count+"人)"");");
		 * for(int i=0;i<users.size();i++){ User us =(User)users.get(i);
		 * sb.append("d.add("+(i+1)+",0,"""+us.getUsername()+""","""","""","""");"); }
		 * sb.append("document.write(d);");
		 * sb.append("d.config.useCookies=false;");
		 * sb.append("d.config.closeSameLevel=true;"); sb.append("</script");//注意这里并不是好了“>”括号,而是在页面另有处理
		 * 
		 * System.out.println("dd="+sb.toString());
		 */
		// 将用户id和页面脚本session绑定
		// this.setScriptSessionFlag(user.getUsername());
		// 获得WEB上下文
		WebContext wctx = WebContextFactory.get();
		// 获得在线列表 页面的所有脚本session
		Collection sessions = wctx.getScriptSessionsByPage("/ichat/pages/main/online_list.jsp");
		Util util = new Util(sessions);
		// 处理这些页面中的一些元素
		// util.addFunctionCall("cBack_list", sb.toString());
		util.removeAllOptions("users");
		util.addOptions("users", users, "username");
	}
我一直都郁闷,在项目外写了个简单的可以。
项目里面
String page=”/Test/frame/index.jsp”;//也就是登录页面也可以
就是放在top.jsp中就不行了。
项目是frameset结构的。。。。
初次接触dwr,这种错是什么意思?
Exception in thread “main” java.lang.NullPointerException
at org.directwebremoting.extend.PageScriptSessionFilter.<init>(PageScriptSessionFilter.java:31)
at org.directwebremoting.Browser.withPage(Browser.java:141)
at com.lhq.ChatManager.main(ChatManager.java:144)
第二行是144行
 

String page=”/dwrTest/index.jsp”;
Browser.withPage(page,new Runnable(){
   public void run(){
     System.out.println(“—————————————“);//调试时程序未打印此句。
     ScriptSessions.addFunctionCall(“test”);//top.jsp 页面上的js 方法
   }
}
);

我也碰到这个问题,帮顶

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明DWR3 推消息到页面,推不过去….