【问题标题】:Refresh Java session object in Javascript在 Javascript 中刷新 Java 会话对象
【发布时间】:2011-09-30 03:22:53
【问题描述】:

一旦检测到会话对象发生变化,我就会尝试使用 javascript 来做某事。但是,在我调用 UpdateServlet 后,javascript 不会检测到会话对象的变化。所有这些都在同一个页面上完成(即没有刷新页面)

请帮忙!谢谢。

index.jsp

<%
     //initial settings
     session.setAttribute("dataUpdated", "false");   

%>
<script>

   $(function() {
         var updates = '<%=session.getAttribute("dataUpdated")%>';

         alert(updates);
         //Shows false even after update

      if (updates=="true"){
          //alert("Updated");
      }



   });
 </script>

UpdateServlet.java

 protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {

       HttpSession session = request.getSession();
       session.setAttribute("dataUpdated", "true");
       //session object set to true

}

【问题讨论】:

    标签: java javascript session servlets refresh


    【解决方案1】:

    您必须使用 Ajax 才能检查此更改。您可以定期使用setInterval 进行检查,如下所示:

    setInterval(function(){
       //Here goes your ajax call
       $.ajax({
         ...
         type: 'post',
         success: function(data){
            ...            
            if(objectChanged){
               //Do your stuff here
            }  
         }
       });
    }, 5000); //Check each 5 seconds
    

    我的建议是使用 POST 方法进行 ajax 调用以避免缓存(如果缓存,则不会检测到更改)

    希望这会有所帮助。干杯

    PS:我使用了 jQuery,因为我看到你在代码中使用它

    【讨论】:

    • 没错!谢谢!现在,我还有一个问题,我需要在成功功能后将会话对象重置为 false。我怎么做?我试过 if (objectChanged){ } 但它不起作用。我必须再次使用 AJAX 吗?
    • 是的,您将再次需要 ajax,但最好在同一个 ajax 调用中重置服务器上的会话对象,这样您就可以将逻辑 if(objectChanged)... 移动到服务器。
    • 哦,你是对的。最好在 servlet 端重置对象。感谢您的提示。
    猜你喜欢
    • 1970-01-01
    • 2014-02-26
    • 2012-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-28
    • 1970-01-01
    • 1970-01-01
    • 2017-07-10
    相关资源
    最近更新 更多