# Struts Actionaufruf durch JS



## 7bkahnt (10. Jun 2010)

Hallo Leute,
ist es möglich mittels JavaScript eine Action aufzurufen?
Ich benutze Struts vers.2 und möchte soetwas wie ein google-suchfeld programmieren.
Wenn ich in das Textfeld etwas eingebe, wartet er 2 sec und sucht dann nach dem Eingegebenen in einer DB.

Bisher klappt das auch fast, nur wird die Methode getArdNamen() direkt in der Action aufgerufen, ohne dass er vorher in setNamensuche() in der Action reingeht.

Da der Wert der in dem Textfeld steht somit nicht übergeben wird krieg ich ne NullpointerException.
Ist es möglich die Action aufzurufen und nicht direkt die Methode in der Action, sodass er vorher in die struts.xml geht und erst alle Variablen settet.

Hier mal der Code bisher:


```
function test()
{
zaehler=zaehler+1;
if(zaehler<=1){
timer=setTimeout("window.location='/PVV/getAdrNamen.action'", 2000);
}
else{
clearTimeout(timer);
timer=setTimeout("window.location='/PVV/getAdrNamen.action'", 2000);
zaehler=zaehler-1;
}
}

<body>
.....
<s:textfield name="namensuche" onkeyup="return test()" cssStyle="width:250px; height:40px;"/>
....
</body>
```

Das Problem ist eben, dass er nur in der Action in die getAdrNamen() geht und nicht vorher in setNamensuche();


----------



## maki (10. Jun 2010)

Du solltest die Form submitten und nicht einfach eine andere URL anzeigen.


----------



## gman (10. Jun 2010)

Hi,

du solltest dir vielleicht mal das jQuery-Plugin für Struts anschauen:

Struts-jQuery-Plugin

Denn deine Anforderungen sind ja eigentlich typisch für AJAX.


----------



## 7bkahnt (10. Jun 2010)

Danke, werd ich mir gleich mal anschauen.
Kann mal jemand ein Beispiel posten, wie ich für meinen Fall die form submitten kann?
Ich hatte ewig rumprobiert mit form.submit() etc. aber leider zu keinem Erfolg gekommen 

grüsse


----------



## 7bkahnt (11. Jun 2010)

Okay habe es hinbekommen.
Die Lösung war doch recht simpel^^ mit document.aufruf.submit():


```
<script type="text/javascript">
var zaehler=0;
var timer=0;

function test()
{
zaehler=zaehler+1;
if(zaehler<=1){
timer=setTimeout("document.aufruf.submit();", 2000);
}
else{
clearTimeout(timer);
timer=setTimeout("document.aufruf.submit();", 2000);
zaehler=zaehler-1;
}
}
</script>

<body>

<s:form name="aufruf" action="testaufruf">
 <s:textfield name="testen" onkeyup="return test()"/>
</s:form>

</body>
```


----------

