# Zwei Buttons in derselben FORM rufen unterschied. Servlets a



## Tec (30. Nov 2004)

Hallo,
habe folgendes Problem: 
Und zwar habe ich eine JSP-Datei, in dieser sind ein paar Eingabefelder vorhanden und ne Bean ist miteingebunden. Der Knackpunkt ist, das in dieser gesamten <FORM> nun 2 Buttons vorhanden sind, jeder Button leitet die Daten an ein anderes Servlet. Jetzt weis ich nur nicht wie ich es realisieren soll, das unterschiedliche Seiten innerhalb dieser Form aufgerufen werden können und jedesmal sämtliche Daten mitübertragen werden.

Hier mal ein Beispielcode:

input.jsp

```
...
<jsp:useBean id="mybean" scope="session" class="myapp.arbeitenbean" />
...
<html>
<form method="post" action="/webapp/servlet1">
...
<input name="eingabebox1">
<input name="eingabebox2">
<input name="eingabebox3">
...
<input type="submit" name="button1" value="sende1">
<input type="submit" name="button2" value="sende2">
</form>
</html>
```

Ein klick auf "sende1" soll nun Servlet1 aufrufen
Ein klick auf "sende2" soll nun Servlet2 aufrufen


Hatte mir als möglichen Lösungweg überlegt gehabt, das ein Zwischenservlet aufgerufen wird von beiden Buttons und dieses Servlet dann auswertet welcher Button angeklickt worden ist und dann entscheidet zu welchem Servlet nun weitergeleitet wird. Leider hänge ich da auch fest, da ich es nicht hinkriege das ein Servlet ein anderes Servlet aufruft und auch sämtliche Daten mitübergeben werden.


----------



## akira (30. Nov 2004)

Hi,

Du könntest das z.B. mit Javascript (böseböse  ) realisieren.

Mach aus den submit-Buttons einfach normale und ordne dem onClick-Event eine Javascript-Funktion zu, welche die Action des Forms setzt, ungefähr so:


```
<script language="Javascript">
<!--
function sendeServlet1() {
   document.forms[0].action = "/webapp/servlet1";
   document.forms[0].submit();
}
function sendeServlet2() {
   document.forms[0].action = "/webapp/servlet2";
   document.forms[0].submit();
}
//-->
</script>

<form method="post">
...
<input name="eingabebox1">
<input name="eingabebox2">
<input name="eingabebox3">
...
<input type="button" value="sende1" onClick="sendeServlet1()">
<input type="button" value="sende2" onClick="sendeServlet2()">
</form>
```


----------



## Bleiglanz (1. Dez 2004)

akira hat gesagt.:
			
		

> Hi,
> 
> Du könntest das z.B. mit Javascript (böseböse  ) realisieren.
> 
> ...



selten so gelacht!

nimm

 input type="request" name="sende1" value="sende1"
 input type="request" name="sende2" value="sende2"

und frags einfach am server ab - mit getParameter


----------



## akira (1. Dez 2004)

> input type="*request*"



was ist das denn, und wie werden da zwei verschiedene Servlets angesprochen?


----------



## Bleiglanz (1. Dez 2004)

sorry, schmarrn, hab mich vertippt

ich meine type="submit"

du bekommst dann am Server nur ein name/value paar (über getParameter) und kannst dadurch unterscheiden, welcher Submit-Button gedrückt wurde


----------



## Tec (1. Dez 2004)

Letztere Methode hatte ich auch im Sinn, nämlich das ein Servlet entscheidet welcher Knopf gedrückt worden ist. Das funzt auch, nur funktioniert das weiterleiten von diesem Servlet zu einem anderen nicht. Hat da mal jemand einen Beispielscode wie das gehen könnte? Die Daten müssen natürlich wie gehabt mit übertragen werden, damit das andere Servlet diese ebenfalls über getParameter auslesen kann.


```
(JSP-Seite)--sendet Daten an-->(ZentralServlet)-----sendet Daten weiter an--->(Servlet1)
                                              |-----sendet Daten weiter an--->(Servlet2)
```
Danke vielmals!


----------



## akira (1. Dez 2004)

in der service-Methode:


```
request.getRequestDispatcher("/anderesServlet").forward(request, response);
```


----------



## Tec (2. Dez 2004)

Funktioniert irgendwie nicht. Habe hier mal den Code vom "Zentralservlet" abgebildet ohne die Abfrage welcher Knopf gedrückt worden ist. Der bringt jedesmal die Fehlermeldung das er die URL nicht finden kann, aber die stimmt so schon, denn wenn ich "response.sendRedirect("/webapp/suchenservlet");" mache, da stimmt der Pfad.



```
public class submitservlet extends HttpServlet {
    private static final String CONTENT_TYPE = "text/html; charset=UTF-8";
    private loginDatenBean loginBean2;

    //Initialize global variables
    public void init() throws ServletException {
    }

    //Process the HTTP Get request
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {


       // hole mir die übergebene Bohne
        HttpSession session = request.getSession(true);

        loginBean2 = (loginDatenBean) session.getAttribute("idloginservlet");
        if (loginBean2 == null) {
            loginBean2 = new loginDatenBean();
        }

        session.setAttribute("idloginservlet", loginBean2);

        response.setContentType(CONTENT_TYPE);
        PrintWriter out = response.getWriter();



      // Funktioniert nicht, kommt URL not found
        request.getRequestDispatcher("/webapp/suchenservlet").forward(request,response);


      // Funktioniert nicht, kommt URL not found
         ServletContext context = getServletContext();
         RequestDispatcher disp = context.getRequestDispatcher("/webapp/suchenservlet");
         disp.forward(request,response);
	    
	 
       // Funktioniert, Pfad wird gefunden, blos werden keine Daten weitergeleitet
         response.sendRedirect("/webapp/suchenservlet");
```


----------



## Tec (2. Dez 2004)

So ich habs hinbekommen!

```
RequestDispatcher disp = getServletContext().getRequestDispatcher("/suchenservlet");
disp.forward(request,response);
```

Danke für eure Hilfe!


----------



## bronks (4. Jan 2005)

Die genannten Ideen hab ich mir jetzt auch mal reingezogen und hab jetzt eine Frage zu den Buttonnamen. Bei mir schaut das ganze so aus:


```
<input type="submit" name="submitbutton" value="knopf1">
        <input type="submit" name="submitbutton" value="knopf2">
```

Ich verwendete für meinen Test zwei SubmitButtons mit dem gleichen Namen und unterscheidlichen Values.  Das macht m.E. mehr Sinn, da dank des einen ButtonNamens die Sache dann namenstechnisch aufgeräumter ist. Verletze ich mit dieser Vorgehensweise irgendwelche Regeln bzw. könnte ich mir damit evtl. andere Probleme einhandeln?


----------



## Bleiglanz (4. Jan 2005)

nein, eigentlich nicht 

sollte funktionieren!


----------

