手动刷新过。。不刷新还是会保持原来的页面状态当然你可以每个页面都启用定时器使用ajax访问一个页面,这个页面判断session存在就输出session存储的用户名,然后ajax得到返回值更新你的span

解决方案 »

  1.   

    没注意看。。以为要更新其他页面的内容,java不懂了,帮你更正版块
      

  2.   

    楼主用的是struts2吗?存session时怎么用ServletActionContext.getRequet().getSession().setAttribute("userName",userName) 
    建议改为struts2的ActionContext.getContext().getSession.put("userName",userName)存放,
    然后再用ActionContext.getContext().getSession().get("userName") 来取。
      

  3.   

    确认你存进去的username不是null么?
      

  4.   

    平常不是经常回帖,不知道在这个页面上点击哪个按钮回复具体的楼层,各位不要见怪了啊,谢谢大家热心的回帖探讨~~
                          ------------------------------------------------------------------------------------------------
    比如,我在home.jsp上单击登录按钮跳转到登录页面login.jsp,而login.js代码里获取从LoginCheckAction.java对登录名和密码的验证结果,假如结果是success,跳转到之前的home.jsp页面上并且把<span id="user'>游客</span>里的游客换成登录名。等我返回到home.jsp时“游客”变成了“null”。                       -------------------------------------------------------------------------------------------------
    楼上说的页面缓存的问题,我认为也应该是,等登录成功跳转到原来的home.jsp上我按了F5刷新了home.jsp,发现<span id="user'>游客</span>里的“游客”换成了登录名。所以估计是缓存的问题。必须要手动刷新一下才能取得session中的登录名。
                           ---------------------------------------------------------------------------------------------------
    又碰到问题了:我在login.js上通过window.history.go(-1)返回到上一页,但是返回到上一页后必须执行手动刷新【F5】才能取得session中的登录名。我不可能这样做的吧,每次登录成功后还要手动刷新上一页。
     所以我想问大家:能否在js代码中实现返回上一页时对它进行强制刷新呢?
    谢谢大家了。
      

  5.   

    为什么感觉楼主写的比较麻烦呢  直接登录后 在action 类里面定义一个username  给它 get set方法    然后在action 里赋值
    jsp中 就可以 <%=userName %>取值
      

  6.   


    嗯,我是这么做的呢。在action里有get和set方法取得userName,但是取得后不是还得返回给原来的home.jsp页面嘛,所以只能放入session中,因为是用window.history.go(-1)进行返回,所以在home.jsp上取得的userName值还是null,但按F5刷新后就可以从session中取到。问题是这样子的所以怎么用window.history.go(-1)进行返回然后又能自动刷新返回的那页就能取得userName的值呢?
      

  7.   


    嗯,我是这么做的呢。在action里有get和set方法取得userName,但是取得后不是还得返回给原来的home.jsp页面嘛,所以只能放入session中,因为是用window.history.go(-1)进行返回,所以在home.jsp上取得的userName值还是null,但按F5刷新后就可以从session中取到。问题是这样子的所以怎么用window.history.go(-1)进行返回然后又能自动刷新返回的那页就能取得userName的值呢?这个就要用1#的方法了。。回退不会重新请求服务器获取新数据的
      

  8.   


    嗯,我是这么做的呢。在action里有get和set方法取得userName,但是取得后不是还得返回给原来的home.jsp页面嘛,所以只能放入session中,因为是用window.history.go(-1)进行返回,所以在home.jsp上取得的userName值还是null,但按F5刷新后就可以从session中取到。问题是这样子的所以怎么用window.history.go(-1)进行返回然后又能自动刷新返回的那页就能取得userName的值呢?如果实现不行的话 window.history.go(-1) 不用这个 直接链接action请求
      

  9.   

    request.getSession().getAttribute("userName");
      

  10.   

    用window.history.go(-1)肯定不行啊!它是返回你上一步浏览器保持的内容。你在上一步的时候session是空,所以了
      

  11.   

    嗯,是的呢,意识到这个问题了,那您可知道有这方面解决办法吗?或许只能采用1楼的办法,但也不能总是定时器隔段时间就刷新页面吧?                           ---------------------------------------------------------------------------------------------------
    其实特别好奇,淘宝,天猫,京东等网站是怎么实现这个操作的呢?平常在打开天猫首页,进入登录窗口,输入用户名和密码,成功后在回到天猫首页,在页面上单击任何商品的链接,始终能在最上面呈现你的用户名。等过了一定时间用户名无效然后需要重新登录。
                                ----------------------------------------------------------------------------------------------------
    这也应该是session的功劳吧?具体不太明白,还望知道的给解答个一二呢。谢谢了~
      

  12.   

    嗯,是的呢,意识到这个问题了,那您可知道有这方面解决办法吗?或许只能采用1楼的办法,但也不能总是定时器隔段时间就刷新页面吧?                           ---------------------------------------------------------------------------------------------------
    其实特别好奇,淘宝,天猫,京东等网站是怎么实现这个操作的呢?平常在打开天猫首页,进入登录窗口,输入用户名和密码,成功后在回到天猫首页,在页面上单击任何商品的链接,始终能在最上面呈现你的用户名。等过了一定时间用户名无效然后需要重新登录。
                                ----------------------------------------------------------------------------------------------------
    这也应该是session的功劳吧?具体不太明白,还望知道的给解答个一二呢。谢谢了~
    就是session的功劳 它自己也有生命周期 你百度查查就懂了 一定时间不动 session就清空了
      

  13.   

    嗯,是的呢,意识到这个问题了,那您可知道有这方面解决办法吗?或许只能采用1楼的办法,但也不能总是定时器隔段时间就刷新页面吧?                           ---------------------------------------------------------------------------------------------------
    其实特别好奇,淘宝,天猫,京东等网站是怎么实现这个操作的呢?平常在打开天猫首页,进入登录窗口,输入用户名和密码,成功后在回到天猫首页,在页面上单击任何商品的链接,始终能在最上面呈现你的用户名。等过了一定时间用户名无效然后需要重新登录。
                                ----------------------------------------------------------------------------------------------------
    这也应该是session的功劳吧?具体不太明白,还望知道的给解答个一二呢。谢谢了~点击上一页 你只要执行action请求就行了 没你说的那么麻烦   action中只要有判断用户是否登录的方法就行
      

  14.   

    你保证需要用到用户之前,filter下登陆是否超时,超时重新登陆,或者把session的有效期再设定长一点,session在哪一步出问题,你要打断点(debug)调试一下
      

  15.   

    楼主的方式是在struts2中获取servlet的接口中的session,然后去存储用户的姓名信息。
    其实 可以用struts2自己的session,去操作起来更方便些。
      

  16.   


    document.referrer用这个提取跳转前的页面,跳转刷新
      

  17.   

    关于history.go(-1)他是操作历史记录的。不会向FWQ发送请求
    你要显示登录名,是一个新的请求。
    方法:
    我的猜测是,验证登录的时候你会从数据库中获得一个登录对象。这个对象中有很多数据  包括username
    我再猜测你的判断条件是    user != null   && password.equals(user.getPassword()) 吧
    既然fingByName方法返回的是一个对象   
    何不在其他页面使用$.post获得这个对象呢 .然后你就可以操作啦。
    或者在获取到这个对象的action中直接就绑定在session上,那样做验证和提取登录用户数据很很方便。
      

  18.   

    我确实是把获取的对象放在了session中了呢,至于您说的用$.post去取,这个想法我还是不太明白【请原谅我的才疏学浅呢...】
                                                                        ------------------------------------------------------------
    后来问题暂时解决了,能实现我的目标~
                                                                        ------------------------------------------------------------
    实现的方法是:假如在home.jsp上单击登录按钮,利用js代码获取userName和userPw,然后$.ajax转到struts2中配置的action[LoginCheckAction.java],然后在LoginCheckAction.java中查询数据库验证,如果用户名和密码都对的话,把userName放入session中,并$.ajax的success属性中回到上一页window.open(document.referrer);实现,谢谢#21的答复
    最后感谢大家,如果以后能有更好的实现方式,再分享给大家~
      

  19.   

    楼主的方式是在struts2中获取servlet的接口中的session,然后去存储用户的姓名信息。
    其实 可以用struts2自己的session,去操作起来更方便些。其实我向说的是这个
    ServletActionContext.getRequet().getSession()
    ActionContext.getContext().getSession()
    这两的区别究竟在哪儿。
      

  20.   

    在struts2中使用session时,可以直接使用strut2的session获取方式,也就是ActionContext.getContext().getSession(),
    ServletActionContext.getRequet() 一般是在struts2 中需要访问servlet的接口时使用这种方式获取。
      

  21.   

    ServletActionContext.getRequet().getSession().setAttribute("userName",userName)
    这是设置session
    获取session 用
    ServletActionContext.getRequet().getSession().getAttribute("userName")
    试试