# Jsp: javascript und javamethode aufrufen



## schlumsch (24. Sep 2010)

Hallo Gemeinde,

folgendes Problem... ich hoffe es kann mir jemand helfen.
Ich habe eine jsp und dort eine Form deklariert. Wenn ich submit drücke rufe ich eine Methode aus meinem dahinter liegenden Bean auf. Das ganze sieht in etwa so aus:

Jsp:

```
<jsp:useBean id = "dmsBean" scope="session" class= "DMS_AdHoc.DmsBean"/>	
  
  <%
    String s1 = request.getParameter( "wtd" );
    if( null != s1 )
      dmsBean.testtest();
  %>
...
...
...

<form action="meinejsp.jsp?guid=<%= requestDocumentId %>" method="post">
...
...

<input id="submitDocumentsButton" type="submit" value="Auswahl übernehmen" name="wtd"				           onclick="resetButtonColor()">
```

Das funktioniert wunderbar. Nun habe ich darüber hinaus noch eine Javascriptfunktion, nämlich diese hier (s.u.) Hier werden alle einträge aus einem select zu einem String zusammengefügt.


```
function showSelected(){
    var optionList = 
       document.getElementById
      ("selectedOptions").options;
    var data = '';
    var len = optionList.length;
    for(i=0; i<len;i++) {
    	if (data != '') {
    		data = data + ",";
    	}
            data = data + optionList.item(i).value;
    }
    return(data);
}
```

Am Ende des Tages soll beim Klicken auf submit der Code aus der Javascriptfunktion aufgerufen werden und danach die Methode im Javabean mit dem Rückgabewert der Javascriptfunktion als Parameter aufgerufen werden. Kann mir jemand verraten wie ich das machen kann?
Eine andere Variante wäre den Code aus dem Javascript in der jsp umzusetzen, also die Einträge des selectes zusammenfügen und dann als Parameter übergeben. Hier weiss ich allerdings auch nicht wie man das macht.

Vielen Dank schon einmal,

Gruß


----------



## Atze (25. Sep 2010)

deine funktion showSelected() gibt doch einen string zurück. den kannst du doch einfach der "Methode im Javabean" (wo immer diese ist  ) übergeben.
klar geht das auch in der jsp, eigentlich analog zu dem js-code. du kannst ja in der jsp genauso (scriptlet-) code schreiben, bzw dir methoden definieren. einfach so wie im js zusammen stöpseln und der bean-methode übergeben


----------



## a00023423 (25. Sep 2010)

Wird wohl nichts werden, da der Javacode nicht mehr interpretiert wird, wenn die Seite beim Client ist und das Javascript ausgeführt wird


----------



## Atze (25. Sep 2010)

stimmt, das mit dem scriptlet wird nicht gehen, hab ich nicht dran gedacht! aber das zusammenschubsen mit js und an das nächste servlet senden sollte gehen


----------



## schlumsch (27. Sep 2010)

schönen Guten Morgen,

Wochenende vorbei - weiter gehts  Also wenn ich das richtig verstanden habe sollte ich weiterhin die js-funktion callen und aus dieser heraus meine Javamethode aufrufen? Wäre nun die Frage wie ich das mache, sorich wie ist der Syntax um meiner Javamethode testtest den in der JS-Funktion gebastelten String data zu übergeben?  thx & Gruß


----------



## Noctarius (27. Sep 2010)

Nein!

Du kannst aus dem JavaScript (welches im Clientbrowser läuft) keine Java-Methode auf dem Server aufrufen.


----------



## schlumsch (27. Sep 2010)

Hmm, so wie du es sagst klingt das logisch. Dann muss ich meine ursprüngliche Frage noch einmal wiederholen, wie bekomme ich die selektierten einträge auf meiner jsp-Seite in eine Methode in meiner Javaklasse? Zur Not könnte die methode auch in der jsp selbst definiert werden, nur wie komme ich an die slelktierten Einträge heran um diese zu verarbeiten?


----------



## Noctarius (27. Sep 2010)

Du schickst die selektierten Einträge als normalen HTTP-Request vom Typ POST an den Server, nimmst sie da entgegen und verarbeitest diese.


----------



## Atze (27. Sep 2010)

Noctarius hat gesagt.:


> Nein!
> 
> Du kannst aus dem JavaScript (welches im Clientbrowser läuft) keine Java-Methode auf dem Server aufrufen.



davon red ich ja garnicht! ich meinte den string mit hilfe von js zusammenstöpseln und diesen string an das nächste servlet schicken!


----------



## Noctarius (27. Sep 2010)

Atze hat gesagt.:


> davon red ich ja garnicht! ich meinte den string mit hilfe von js zusammenstöpseln und diesen string an das nächste servlet schicken!



Ich habe dir auch nicht geantwortet. Der TO fragte "wenn ich das richtig verstanden habe kann ich ..." -> Nein!


----------



## Atze (27. Sep 2010)

ok


----------



## schlumsch (27. Sep 2010)

Hmm, also irgendwie funktioniert das ganze nicht wirklich. Problem: mein doPost wird nicht aufgerufen und ich kann mir nicht erklären wieso. Ich habe miene Klasse ind der web.xml deklariert

```
<servlet>
    <servlet-name>DMS_AdHoc</servlet-name>
    <servlet-class>DMS_AdHoc.DmsBean</servlet-class>
  </servlet>
...
```

In meiner jsp habe ich die Form mit

```
<form action="includeAdhoc.jsp" method="POST">
...
```
Beim laden der jsp kann ich allerdings auf Methoden der Javaklasse zugreifen,

```
<jsp:useBean id = "dmsBean" scope="session" class= "DMS_AdHoc.DmsBean"/>
...
  <% 
  String requestDocumentId = "";
  ArrayList<DocumentAttachment> attachmentsInDocument = new ArrayList<DocumentAttachment>();
  ArrayList<DocumentAttachment> attachmentsNotInDocument = new ArrayList<DocumentAttachment>();
  if (request.getParameter("guid") == null) {
 } else {
	  requestDocumentId = request.getParameter("guid");
	  attachmentsInDocument = dmsBean.getDocumentAttachments(requestDocumentId,"Beilagen",",");
	  attachmentsNotInDocument = dmsBean.getNonDocumentAttachments(attachmentsInDocument);	
  } 
  %>
```
Ich habe mittlerweile meine Javascriptfunktion dahingehend erweitert das ich ein zusätzliches
input Feld mit dem gewünschten String versehe.

```
document.getElementById("selectedAttachments").value=data;
```
Das Feld sitzt in meinem Formular. Beim Drücken von Auswahl übernehmen erscheint kurz
der gesetzte Wert in diesem input, die Seite wird nach dem submit neu aufgebaut aber im
doPost der Javaklasse landet er nicht.


```
<input id="selectedAttachments" type="text" value="hallo" name="selectedAttachments">
<input id="submitDocumentsButton" type="submit" value="Auswahl übernehmen" name="wtd"
 onclick="showSelected(),resetHintVisibility(),resetButtonColor()" 
 style="width:150px; background-color:#eaeaea;">
[/Java]
```


----------



## Atze (27. Sep 2010)

wie sieht denn das servlet aus? bist du sicher, dass dort doPost nicht aufgerufen wird? oder kommt der wert nur nicht an, bzw liest du ihn nicht richtig aus! wie sieht denn das servlet-mapping in der web.xml aus?


----------



## schlumsch (27. Sep 2010)

Ja okay wenn ich die action der Form auf den in meiner webxml angegebenen urlpattern lenke lande ich nun auch in doPost  
Dort kann ich mit String s3 = req.getParameter("selectedAttachments") meine Parameter auslesen, danke für den "subtilen Hinweis"


----------



## Atze (27. Sep 2010)

kaum macht mans richtig, gehts!


----------



## schlumsch (27. Sep 2010)

Ja du sagst es. Und ich mache jetzt bestimmt auch wieder irgendeinen Blödsinn aber egal, jedenfalls ergibt sich ein weiteres Problem. Nachdem ich (erfolgreich) in doPost etwas bearbeitet habe möchte ich auf meine jsp zurück forwarden. Dabei ahbe ich zuerst eine illeagleStateException bekommen, nachdem ich mich schlau gegooglet habe und das super aus dopost entfernt habe bekomme ich "nurnoch" ein Seite kann nicht angezeigt werden.

```
String redirectionUrl = "includeAdhoc.jsp?guid=" + theGuId;
    	resp.sendRedirect(theGuId);
```
theGuId hat debei einen konkreten Wert. Habe bereits an der Url alle Möglichkeiten ausprobiert, hier der Versuch ohne das rulpattern der web.xml


----------



## schlumsch (27. Sep 2010)

Habe das mal genauer eruiert, wenn ich im Firebug den Postrequest untersuche habe ich im referer genau die url, die ich vor Betätigung des submit-buttons zu Beginn aufrufe. Bedeutet also die url selbst stimmt


----------



## schlumsch (27. Sep 2010)

Ja ok, ich merke es ist Montag und ich brauche Urlaub. Ich sollte natürlich auch auf die von mir zusammengebaute url und nicht nur auf meine id redirecten  *hau* Warum ich dann allerdings diese Anzeige (s.o.) im Firebug bekommen habe erklärt sich mir jetzt nicht unbedungt...


----------

