2011-07-07 5 views
0

セッションオブジェクトの変更を検出したら、何かを行うために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

この変更を確認するためにアヤックスを使用する必要があります。あなたは、このような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

thats rights!ありがとう!さて、私はもう一つ問題があります、私は成功関数の後にセッションオブジェクトをfalseにリセットする必要があります。それ、どうやったら出来るの? (objectChanged){<%% session.setAttribute( "dataUpdated"、 "true")%>} の場合は試しましたが、うまくいきません。 AJAXをもう一度使用する必要がありますか? – newtodatatables

+0

はい、もう一度ajaxが必要ですが、同じajax呼び出しでサーバー上のセッションオブジェクトをリセットする方がよいので、ロジックif(objectChanged)をサーバーに移動してください。 –

+0

あなたは正しいです。サーブレット側でオブジェクトをリセットする方が良いでしょう。先端に感謝します。 – newtodatatables

関連する問題