JSP JSP in JSP mit refresh einbinden

M4D-M4X

Bekanntes Mitglied
Grüßt euch,

und zwar bin ich grad dabei eine jsp seite zu erstellen, die eine Datenbankanbindung besitzt.
Diese Seite hat einen Refreshintervall von 5 Minuten(bis zu 15 Minuten auswählbar).

Und in dieser Seite gibt es jetzt ein <td>, das jede Minute aktualisiert werden soll(aus Datenbankgründen).

Meine Idee war zuerst ein IFrame, aber der hat einen border, womit die anzeige bei mir hässlich wirkt und nich geeignet ist.

Danach habe ich nochmal eine .jsp erstellt die ich dann mit pageContext.include("test.jsp"); lade.
Darin befindet sich auch die Javascript Methode

Java:
function timedRefresh(timeoutPeriod) {
	setTimeout("location.reload(true);",timeoutPeriod);
}

<body onload="JavaScript:timedRefresh(60000);">


im body werden dann berechnungen gemacht und am schluss soll dieser eine wert in das <td> der hauptseite geschrieben werden.

Es funktioniert soweit auch, bis auf die tatsache, dass die ganze seite nach einer Minute refresht wird und nicht nur dieses eine <td>.

Ich hoffe ihr könnt mir weiterhelfen

PS: Das sind momentane voraussetzungen, ich kann nichts daran ändern


Schöne Grüße
 
N

nillehammer

Gast
Ein include auf Serverseite bringt nichts. Das Dokument (das Du dann refreshst) wird im Browser zusammengebaut.
Es gibt zwei Möglichkeiten:
1. Den von Dir bereits gewählten Ansatz mit dem iframe (Damit hast Du effektiv 2 Dokumente und kannst die unabhängig von einander vollständig refreshen). Nutze css, um den Border zu entfernen. Etwa so:
Code:
iframe {
  border: none 0px;
}
2. Benutze AJAX
 
Zuletzt bearbeitet von einem Moderator:

M4D-M4X

Bekanntes Mitglied
Ich habs jetzt nochmal mit dem IFrame probiert und was ich vorher mit dem border meinte, war nicht der border im eigentlichen sinne (entschuldigung), sondern bei mir bleibt im IFrame ein Rand oben und links vom Text. Außerdem sollte der Text in die mitte vom <td>

mein Iframe sieht grad so aus:

<iframe src="servicelevel.jsp" scrolling="no" height = "20" width = "50" frameborder = "0" align = "left" marginheight="0" marginwidth="0">

</iframe>

Ich hab noch ein Bild vom Problem angehängt(Im roten <td> ist der IFrame)


Edit:
Ok das Problem lies sich lösen...
Hab einfach den Border auf 1 gestellt und dann ist der Text auf einmal hochgerutscht...
Border wieder auf 0 gestellt und dann isser da geblieben... komisch...


Ich denke aber mit einem IFrame ist es doch so:

Wenn die Hauptseite einen Refreshintervall von Hauptseite<IFrame hat, dann wird der Iframe immer dann aktualisiert, wenn die Hauptseite aktualisiert wird oder?

muss ich dazu dann wirklich ajax benutzen oder gibts doch noch nen anderen weg um die seiten unabhängig voneinander zu refreshen?
 

Anhänge

  • IFrame Problem.png
    IFrame Problem.png
    751 Bytes · Aufrufe: 40
Zuletzt bearbeitet:
N

nillehammer

Gast
Innen- und Außenabstände werden bei CSS mit padding und margin konfiguriert. Es sieht mir in dem Fall nach padding aus.
Code:
padding: 0
müsste das Problem beheben.

Styling mit CSSist manchmal ziemlicher Fummelkram. Übers Forum schwer zu supporten. Ich hab Dir deswegen mal einen Link rausgesucht, wo CSS sehr gut beschrieben ist:
SELFHTML: Stylesheets / CSS-Eigenschaften
 
N

nillehammer

Gast
Ich denke aber mit einem IFrame ist es doch so:
Wenn die Hauptseite einen Refreshintervall von Hauptseite<IFrame hat, dann wird der Iframe immer dann aktualisiert, wenn die Hauptseite aktualisiert wird oder?
Ja, ich denke auch, dass das so ist. Da aber Dein Hauptfenster ein wesentlich größeres Intervall hat als Dein Iframe ist es ja nicht so schlimm, wenn der iframe einmal öfter als nötig geladen wird oder?

muss ich dazu dann wirklich ajax benutzen oder gibts doch noch nen anderen weg?
Du könntest mehrere unabhängige frames/iframes benutzen. Und den refresh der Hauptseite in die frames verlagern.

Ansonsten kommst Du um AJAX nicht herum. In "normalem" Html ist es nicht möglich, nur einen Teil der Seite upzudaten. Genau dafür ist AJAX erfunden worden. Es wird ein spezieller Request abgesetzt und als Response kommt ein Seitenschnipsel (in Deinem Fall ein <td>...</td>) zurück, der an der richtigen Stelle vom Browser per JavaScript ins Dokument eingebaut wird.
 

M4D-M4X

Bekanntes Mitglied
Problem ist an dieser Stelle, dass man als Intervall 15 Sekunden, 30 Sekunden, 45 Sekunden, 1 Minute usw. bis 15 Minuten wählen kann. Da der Kunde voraussichtlich 15 oder 30 Sekunden wählt, weil es Echtzeitdaten sind, gibts an dieser Stelle ein Problem.

Von der Datenbankseite aus sollte das Statement für diese Berechnung eben nur jede Minute oder zwei Minuten gestartet werden.

Das mit den multiplen IFrames ist noch ne Sache die könnte ich versuchen.

Auf dem nachhauseweg ist mir aber noch ein mögliche, aber sehr umständliche Möglichkeit eingefallen wie es funktionieren könnte. Und zwar:

Gibt es nur noch die Hauptseite und die Berechnung in dem <td> wird nur gestartet wenn quasi 60 Sekunden bzw. das Intervall der Hauptseite vergangen sind. Das ganze wird dann mit Parametern in die URL leiste gepackt.

z.B.

Ich hab als Intervall 15 Sekunden ausgewählt und übergeb bei jedem Refresh der Seite den Refreshcounter += 1;

Bedeutet: Wenn der Refreshcounter oder höher ist, führ mir den Code aus, der im <td> steht, danach ist der Refreshcounter wieder 0.

Ich denke mal das ist eine akzeptable Lösung um das refreshen zu umgehen oder ?

Ausprobieren werd ichs auf jeden Fall und morgen mal posten obs funktioniert hat oder nicht.


Ich danke dir vielmals für deine Hilfe =)
 

Ähnliche Java Themen

Neue Themen


Oben