2010-11-30 5 views
2

Ich habe eine JSP-Seite, auf der ich Sitzungsattribute lese, die ich in der Sitzung festgelegt habe.Aktualisieren eines DIV-Elements, das JSP-Code-Snippet enthält

Ich möchte die Session-Attribute in regelmäßigen Abständen lesen. Ich möchte nicht die ganze Seite neu laden, sondern ich behalte gerade meine JSP Session Leseattribute in meinem DIV und versuche das DIV neu zu laden. Aber das DIV wird nicht neu geladen.

Hier ist mein Code-Basis:

<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> 

besser Ideen sind willkommen.

Antwort

2

JSP rendert einmal auf dem Server und wird dann an den Client gesendet, nach dem der Java-Code nichts tut. Sie können den HTML-/JavaScript-Code und den Java-Code nicht in derselben Datei speichern, wenn sie zu unterschiedlichen Zeiten/Frequenzen geladen werden sollen.

diese in einer Datei getrennt .jsp Put:

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

Angenommen, es bis zu einem gewissen url /checkStatus.jsp

Entfernen Sie die loaddata div abgebildet ist, weil Sie es nicht mehr benötigen. Ersetzen Sie Ihr Javascript mit:

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

setInterval(reloadStatus, 1000); 
1

Der Code in einer JSP wird kompiliert/ausgeführt, bevor der resultierende HTML-Code an den Browser gesendet wird. Sie können einen Teil der Seite nicht als gerendert erneut laden und erwarten, dass sich die Seite ändert. Sie müssten wahrscheinlich einen versteckten iFrame erstellen und diesen komplett neu laden (einfach) oder einen Webservice erstellen, um die Parameter abzufragen (härter).

+0

Wie lade ich den iframe "vollständig" neu? –

2

Ihr JSP-Code wird nur einmal ausgewertet - wenn die Seite zum ersten Mal geladen wird. Wenn JSP-Code ausgeführt wird, wird HTML generiert und an den Browser gesendet. Du kannst ein Div nicht so "neu laden"; Der JSP-Code wird nicht ausgeführt.

Was können Sie tun, um die JSP-Code in eine separate filee wird gesetzt und dann jQuery.load verwenden Sie diese Seite in ein div zu laden:

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

status.jsp enthält nur die eine Zeile:

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

Ich habe das versucht und funktioniert super in Firefox und IE auf Vista-Maschine. Aber funktioniert nicht in IE 8 unter Windows 7 Betriebssystem. Also gibt es noch etwas, das ich in IE 8 auf Win 7 OS arbeiten sollte. –

+0

@Multiplexer würde ich nicht denken. Welche Version von IE ist auf der Vista-Maschine? –

+0

Ich benutze IE 8 auf den Vista und Windows 7 Maschinen. –

Verwandte Themen