# Struts und Ajax. Problem mit Actions



## 7bkahnt (18. Aug 2010)

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?


----------



## Dennis-20 (18. Aug 2010)

Das ist alles möglich!
Unter AJAX kannst du sehen dass es die Möglichkeit gibt, einen Stream zurückzugeben, also wie du wolltest keine JSP-Seite.
Wenn du nun auf einen Button klickst kannst du beispielsweise mittels AJAX / JQUERY eine Transaktion auslösen ohne dass die aktuelle Seite verlassen wird.

Beispiel.jsp:

```
<script type="text/javascript">
	function test() {
                var html = $.ajax({
		      url: "AKTIONSNAME.action",
		      async: false
	        }).responseText;
                document.getElementById("div-id-name").innerHTML = html;
        }
 </script>
```


----------



## gman (18. Aug 2010)

Hi,

etwas vereinfachen kannst du dir die Sache durch das struts-jquery-plugin. Dazu gibt es auch eine Demo-Seite. Der Teil "Ajax Forms" dürfte für dich interessant sein.


----------

