Hallo Leute,
ich stehe vor einem Problem und ich hoffe ihr könnt mir helfen.
Ich habe vor kurzem meine erste Struts-Anwendung geschrieben.
Allerdings wird bei jedem Button-Klick, wodurch eine Action aufgerufen wird, der Nutzer auf eine andere Seite(jsp-Datei) verlinkt.
Beispielsweise habe ich eine komplett neue jsp erstellen müssen, die sich zur Vorrigen nur in sofern unterscheidet, dass ein neues div-Element hinzugekommen ist. Wenn der Nutzer also einen Button klickt, wird die gewünschte Funktion in der Actionklasse, welche die Daten für das div-Element besorgt, ausgeführt und auf die jsp mit diesem div-Element verlinkt.
Ich denke diese Lösung ist allerdings nicht sehr effektiv.
Deswegen meine erste Frage. Ist es möglich in Struts durch einen Buttonklick auf keine Seite verlinken zu müssen?
Bzw. muss das result einer action immer eine neue jsp sein? Natürlich kann es auch eine Verlinkung zu einer anderen Action sein, nur dort stehe ich ja dann vor demselben Problem.^^
Weil man muss ja in der struts-config.xml immer ein result angeben, wie ich das verstanden habe. Wenn der Nutzer also einen Button klickt, wird eine action bzw Methode aufgerufen, die abgearbeitet wird. Danach muss ich in der struts.xml ein result für diese action angeben, was eben eine andere Seite ist.
So muss ich also wenn der Nutzer den Speichern-Button klickt, die Seite komplett neu laden, da ich ja neben der eigentlichen Speichern-Funktion auf eine Seite in der xml-Datei verlinken muss.
Ist das ganze vielleicht mit Ajax umgehbar?
Beispielsweise soll bei einem Buttonklick ein neues div-Element angezeigt werden.
Wenn ich auf den Button klicke muss eine Funktion ausgeführt werden, welche die Daten für das div-Element besorgt. Ist das mit Ajax irgendwie realisierbar, ohne dass ich dazu wieder durch die struts.xml-Datei auf eine komplett andere jsp verweisen muss?
Moin,
Also du kannst Inhalt auf jeden Fall dynamisch nachladen und wirst dafür auch eine jsp oder html Seite anlegen müssen.
Du kannst den Inhalt der ausgegeben werden würde wenn du eine Seite aufrufst durch Ajax nachladen.
Somit könntest du eine „Seite“ erstellen auf der sich nur das befragte div befindet. Die Seite wird von dem xml-http-Request aufgerufen und als Antwort kriegst du die Ausgabe zurück (im Endeffekt alles was auf der seite erscheinen würde)
Eine Sache musst du jedoch bedenken. Es gibt Leute, die JS deaktiviert haben. Somit ist eine Nonscript Variante sowieso nötig. Heisst du musst auf jeden Fall eine neue Seite anlegen.
Ich weiss nicht genau wie es bei Struts läuft. Aber kannst du nicht für die Successseite auch die gleiche Seite wie die Absenderseite nehmen und dann einen Wert verarbeiten der per get oder post durchgereicht wurde?
Weil an hand der Request variable könntest du auch schon auf Java Seite fragen, ob genau dieses div includet werden soll.
Also zurück zum Ajax Thema:
Deswegen meine erste Frage. Ist es möglich in Struts durch einen Buttonklick auf keine Seite verlinken zu müssen?
Komische Fragestellung, aber deine View ist ja die JSP. Diese ist ja wie eine normale HTML Datei aufgebaut. In diese kannst du dann auch Javascript Code einfügen bzw JS-Dateien hineinladen. Das ist Server- und Sprachenunabhäbgig. Denn Javascript wird ja clientseitig ausgeführt. Dieses Javascript macht intern auch nichts anderes als die Seite, die du per Ajax ansprechen willst aufzurufen und dir den Inhalt der ausgegeben wird zurück zu geben.
Somit ist es unabhängig ob du Struts, Spring,Servlets, PHP, HTML oder einfach nur eine Textdatei verwendest. Javascript ist da komplett unabhängig.
Für leichte Ajax Request würde ich dir ein Framework empfehlen, da der Umgang mit Ajax dort viel leichter gegeben ist.
Dafür kannst du zum Beispiel jQuery: The Write Less, Do More, JavaScript Library oder Prototype JavaScript framework: Easy Ajax and DOM manipulation for dynamic web applications nehmen
Wenn du fragen hast wie du etwas davon anstellen kannst einfach nochmal fragen
Ja schon, das mache ich bisher ja auch. Nur es sieht eben echt nicht toll aus. Da wenn man Speichern klickt die Seite kurz flackert, da sie ja quasi aktualisiert wird. Wenn man den Refresh-Button im Browser klickt, flackert die Seite ja auch kurz bis die Neue geladen ist. Und genau das passiert eben auch wenn ich nur ein unteres div-Element anzeigen will (mit Daten befüllt).
Danke dir. Da stell ich doch direkt mal die erste Frage^^. Hast du evtl. mal einenCodeschnipsel, wo ich mittels Ajax nen div lade, in dem Daten importiert werden? Hatte schon ein paar gefunden, die aber irgendwie recht schwierig zu verstehen waren.
Mir fehlt wahrscheinlich einfach noch das Verständnis wie Ajax mit Struts harmoniert. Denn die Textfelder in dem div-Element müssen ja auch iwie gefüllt werden mittels der getter-Methoden in der Actionklasse von Struts. Nur werden diese ja nicht aufgerufen wenn ich keine action ausführe. Wenn ich aber wiederum eine action ausführe muss ich wieder eine jsp-Datei in der xml-Datei angeben. Ein Teufelskreis^^
Also die Action wirst du wohl oder übel ausführen müssen.
Nur wird sie im Hintergrund ausgeführt. Dann wird die Seite aufgerufen wo die Action ausgeführt wird. (Mit Parametern) Die Serverseite befüllt dein Div mit dem was du da auch immer hast. Und das was dann ausgegeben wird, das fügst du per Ajax ein. Vielleicht willst du erst mal Ajax benutzen ohne Java ins Spiel zu bringen. Sondern du lädst Dateien aus einer HTML Datei nach.
Zuerst wird die Seite test.html „geöffnet“ (ein Request wird an die Seite geschickt) Die Antwort liefert die Funktion mit dem Argument data. Diese Funktion schreibt das Ergebnis dann als HTML in das/die Elemente mit dem CSS Klassennamen result.
Wichtig ist natürlich wenn du noch nie mit javascript gearbeitet hast, dass du auch die Javascript Datei von JQuery rein lädst.
Wie du mit jQuery umgehst kannst du auf der Seite von jQuery erfahren: Tutorials:Getting Started with jQuery - jQuery JavaScript Library