2011-07-07 44 views
0

我想在JavaScript检测到会话对象发生变化时使用javascript来做某件事。但是,在调用UpdateServlet之后,javascript并未检测到会话对象中的更改。所有这些都是在同一页面上完成的(即没有刷新的页面)使用Javascript刷新Java会话对象

请帮忙!谢谢。

的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 

} 

回答

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的原因,我看到你在你的代码上使用它

+0

这就是对的!谢谢!现在,我还有一个问题,我需要在成功函数后将会话对象重置为false。我怎么做? 我试过如果 (objectChanged){<%= session.setAttribute(“dataUpdated”,“true”)%>} 但它不起作用。我必须再次使用AJAX吗? – newtodatatables

+0

是的,你会再次需要ajax,但最好是在同一个ajax调用中重置服务器上的会话对象,所以你可以将逻辑'if(objectChanged)...'移动到服务器。 –

+0

哦,你是对的。最好重置servlet端的对象。谢谢你的提示。 – newtodatatables