2010-11-30 53 views
2

J'ai une page JSP où je lis les attributs de session que j'ai définis dans la session. Je souhaite lire les attributs de session à intervalles réguliers. Je ne veux pas recharger la page entière mais je garde simplement les attributs de lecture de ma session JSP dans ma DIV et essaye de recharger la DIV. Mais il ne recharge pas le DIV.Actualisation d'un élément DIV contenant un fragment de code JSP à l'intérieur

Voici ma base de code:

<html> 
    <head> 
    // Loading CSS and Script files 
    </head> 
    <body> 
    <div id="loadData" style='display:none;'> 
     <% 
      String strStatus = String.valueOf(session.getAttribute("Status")) ; 
      %> 
    </div> 
    </body> 
    <script type="text/javascript"> 
    var reqStatus = '<%= strStatus %>'; 

    $(this).load(function(){ 
     setInterval(function() { 
      $("#loadData").load(); 
      } ,1000); 
    }); 
    $("#loadData").load(function(){ 
     if(reqStatus == 'Done') { 
     // My Code goes here.. 
     } 
    }); 
</html> 

Les meilleures idées sont également les bienvenus.

Répondre

2

JSP s'affiche une fois sur le serveur et est ensuite envoyé au client, après quoi le code Java ne fait rien. Vous ne pouvez pas placer le code HTML/javascript et le code Java dans le même fichier si vous voulez qu'ils soient chargés à des heures/fréquences différentes.

Mettre cela dans un fichier séparé .jsp:

<%= String.valueOf(session.getAttribute("Status")) ; %> 

Supposons qu'il est mis en correspondance avec une url /checkStatus.jsp

Retirez le loadData div parce que vous n'avez pas besoin plus. Remplacez votre javascript par:

var reloadStatus = function() { 
    $.ajax("/checkStatus.jsp", function (data) { 
     if (data == "Done") { 
      // Your code here 
     } 
    }); 
}; 

setInterval(reloadStatus, 1000); 
1

Le code d'une page JSP est compilé/exécuté avant que le code HTML résultant ne soit envoyé au navigateur. Vous ne pouvez pas recharger une partie de la page telle que rendue et attendez qu'elle change. Vous auriez probablement besoin de faire un iframe caché et de recharger complètement (facile), ou faire un webservice pour interroger les params (plus difficile).

+0

Comment recharger l'iframe "Complètement"? –

2

Votre code JSP est évalué une seule fois - lors du premier chargement de la page. Lorsque le code JSP s'exécute, le code HTML est généré et envoyé au navigateur. Vous ne pouvez pas "recharger" un div comme ça; le code JSP ne fonctionnera pas.

Ce que vous pouvez faire est de mettre le code JSP dans un FILEE distinct, puis utiliser jQuery.load pour charger cette page dans un div:

jQuery(document).ready(function() { 
    setInterval(function() { 
     jQuery('#loadData').load('/status.jsp'); 
    }, 1000); 
} 

status.jsp ne contiendra que la seule ligne:

<%= String.valueOf(session.getAttribute("Status")) ; %> 
+0

J'ai essayé ceci et fonctionné très bien dans Firefox et IE sur la machine de Vista. Mais ne fonctionne pas dans IE 8 sur Windows 7 Système d'exploitation. Donc, y at-il une autre chose que je dois envisager de travailler dans IE 8 sur Win 7 OS. –

+0

@Multiplexer Je ne pense pas. Quelle version d'IE est sur la machine vista? –

+0

J'utilise IE 8 sur les machines Vista et Windows 7. –