Zwei Buttons in derselben FORM rufen unterschied. Servlets a

Status
Nicht offen für weitere Antworten.

Tec

Mitglied
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
Code:
...
<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

Bekanntes Mitglied
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:

Code:
<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

Gesperrter Benutzer
akira hat gesagt.:
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:

Code:
<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>

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:)
 

Bleiglanz

Gesperrter Benutzer
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

Mitglied
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.

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

akira

Bekanntes Mitglied
in der service-Methode:

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

Tec

Mitglied
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.


Code:
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

Mitglied
So ich habs hinbekommen!
Code:
RequestDispatcher disp = getServletContext().getRequestDispatcher("/suchenservlet");
disp.forward(request,response);

Danke für eure Hilfe!
 

bronks

Top Contributor
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:

Code:
       <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?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben