dwr的ScriptSession问题,在线等!

wangzhuoyan 2009-10-30 10:51:52
初学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 总是空的,在发送页面没有值,是什么原因呢,求高人指点
...全文
759 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
star_zk 2012-10-09
  • 打赏
  • 举报
回复
ServletContext context = request.getSession().getServletContext();
ServerContext serverContext = ServerContextFactory.get(context);
Collection<ScriptSession> sessions = serverContext
.getScriptSessionsByPage("/message/login.action");

我这段代码是获取访问action的用户,
在电脑浏览器上访问可以获得到
但是在手机上访问获取不到,这是为什么呢???
yin_wu 2011-11-02
  • 打赏
  • 举报
回复
[size=16px]
[b]
[/size][/b]
bingby 2009-11-30
  • 打赏
  • 举报
回复
WebContext wctx = WebContextFactory.get();
String currentPage = wctx.getCurrentPage();
youjianbo_han_87 2009-10-30
  • 打赏
  • 举报
回复
楼上的可以参考,但是我感觉楼主因该修改下思路,dwr仅仅用来异步显示和刷新名单信息就可以了,不要在里面做一些逻辑控制相关的动作。
shuai45 2009-10-30
  • 打赏
  • 举报
回复
1、一个页面会产生一个新的scriptSession。所以当你刷新当前页面就会产生一个新的scriptSession。而这个scriptSession是唯一通信的通道。
2、如果同一页面有多个scriptsession 那么其session肯定获取不到。
3、放到map中判断,确保一个页面有个session存在。
swandragon 2009-10-30
  • 打赏
  • 举报
回复
不懂,up
GuoGongZhou 2009-10-30
  • 打赏
  • 举报
回复
WebContextFactory.get().getSession()
Rangers_Sword 2009-10-30
  • 打赏
  • 举报
回复
...
guodong66 2009-10-30
  • 打赏
  • 举报
回复
哇塞,好长,等下班了给你看看。

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧