请教个dwr的问题

怎么从ScriptSession取得当前用户,实现向特定的用户发送脚本? 下面是我的代码,要怎么改造?
FacesContext facesContext = FacesContext.getCurrentInstance();
ServletContext servletContext = (ServletContext) facesContext.getExternalContext().getContext();
ServerContext sctx = ServerContextFactory.get(servletContext);
Collection sessions = sctx.getAllScriptSessions();
Util pages = new Util(sessions);
pages.addFunctionCall("initD", subject, "im.xhtml?users=" + java.net.URLEncoder.encode(users));

其实可以这样,跟去session去推送
因为session是唯一的··
那么你得自己管理session 与scriptsession的映射和维护正确的scriptsession
自己维护一个Map,在这个Map里面,定义key就是HttpSession的Id,其值就是ScriptSession对象。
在每一次页面载入的时候,都去注册此ScriptSession,那么就会把新的ScriptSession绑定到httpSession上面了。

Map sm
// hs is HttpSession
// ss is ScriptSession object
sm.put(hs.getId(), ss);
然后
通过上面的Map取得所有的有效ScriptSession集合
取出对应你要推送消息的user的sessionid的对应ScriptSession

然后再推送,就可以了。

发了两遍啊

:oops: 向特定用户推送信息?

ScriptSession保存的是访问页面的所有用户啊·

Collection sessions = sctx.getAllScriptSessions(); 你这样得到的是所有页面访问者的 ScriptSession啊·
试试这样的
Collection pages = sctx.getScriptSessionsByPage("/im.xhtml?users=" + java.net.URLEncoder.encode(users)");
就是发送给 需要发送用户的页面···你这个users参数代表的是什么意思啊?
所有用户?

[code="java"]
ScriptSession 这个里面的用户名没什么意义啊

ScriptSession不会与HttpSession同时创建
当我们访问一个页面的时候,如果是第一次访问,就会创建一个新的HttpSession,之后再访问的时候,就会保持当前的Session,即使是刷新,也能保持当前的HttpSession。
但是,ScriptSession不同,第一次访问,会创建一个ScriptSession,但是,如果你刷新,就会创建一个新的ScriptSession.

我觉得你应该换一个方式来解决这个问题了···
[/code]

这个是我以前做的,很久了,是一个服务器推送的问题,应该是你想要的
[code="java"]
/**
* 根据用户id获得指定用户的页面脚本session
* @param userid
* @param request
* @return
*/
@SuppressWarnings("unchecked")
public ScriptSession getScriptSession(String userid, HttpServletRequest request) {
ScriptSession scriptSessions = null;
Collection sessions = new HashSet();
sessions.addAll(ServerContextFactory.get(request.getSession().getServletContext())
.getScriptSessionsByPage("/chat/index.jsp"));
for (ScriptSession session : sessions) {
String xuserid = (String) session.getAttribute("userid");
if (xuserid != null && xuserid.equals(userid)) {
scriptSessions = session;
}
}
return scriptSessions;
}
[/code]

8) 那我得在所有页面都得维护这个map?
没弄懂你这个意思··
我觉得应该是你要推送的页面···