welcher submit-Button wurde gedrückt?

Status
Nicht offen für weitere Antworten.

ernst

Top Contributor
Hallo allerseits,
In einem HTML-Formular kann man mit submit den Inhalt des Formulars an den Webserver versenden.
Angenommen man hat 2 submit-Buttons, wie in dem Beispiel unten.
Wie kann man dann in einem Java-Servlet feststellen, welcher Button gedrückt wurde.
Mit getParameter(...) kann man doch nur den Inhalt eines Textfeldes abholen.
Also wie funktioniert das?


------------------------------------------------------------------------------------
<html>
<head>
<title>Datenerfassung</title>
</head>
<body>
<h1>Datenerfassung</h1>
<form action="http:/localhost:8080/db2/Austausch" method="post">
Artikelnummer: <input type=text name="Artikelnummer" size=40

Bezeichnung: <input type=text name="Bezeichnung" size=40

Bestand: <input type=text name="Bestand" size=40

Preis: <input type=text name="Preis" size=40

<input type=submit name="suchen" value="SUCHEN">
<input type=submit name="einfuegen" value="EINFÜGEN">
</form>
</body>
</html>
------------------------------------------------------------------------------------


mfg
Ernst
 

donnar

Mitglied
Hallo Ernst,

wenn ich einen Button abfangen möchte, erstelle ich für jeden ein eigenes Form, wobei auch jeder Button ein eigenes hidden Field besitzt:
Code:
<form action="<%=request.getContextPath()%>/servlet/ControllerServlet" method="get">
  <input type="hidden" name="doAction" value="suchen" />
  <input type=submit name="suchen" value="SUCHEN">
</form>
<form action="<%=request.getContextPath()%>/servlet/ControllerServlet" method="get">
  <input type="hidden" name="doAction" value="einfuegen" />
  <input type=submit name="einfuegen" value="einf&gen">
</form>
Nun wird jedes klicken durch einen ControllerServlet abgefragt:
Code:
//import JdbcQueryBean.*;
package deinPackage;

import javax.servlet.*;
import javax.servlet.http.*;


public class ControllerServlet extends HttpServlet {

  private JdbcQueryBean queryBean = null;
  private OrderdataBean orderDataBean = null;


  public void init(ServletConfig config) throws ServletException {
	super.init(config);
    queryBean =  new JdbcQueryBean ();
	orderDataBean = new OrderdataBean ();
  }

  public void doGet(HttpServletRequest request,
                      HttpServletResponse response) {
    try {
	     String doAction   = request.getParameter("doAction");
	     String ActionURL = "ControllerServlet";
	     String url = null;
	     String controlParam =null;
         if (doAction.equals("suchen")){
			url = "/web/jsp/suchen.jsp";
         }
         else if (doAction.equals("einfuegen")){

                    url = "/web/jsp/einfuegen.jsp";
         }
          
            HttpSession session = request.getSession(true);
            RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(url);
            dispatcher.forward(request, response);
   } catch (ServletException ex){
            System.out.println("Exception when forwarding the request");
            ex.printStackTrace();
   } catch(Exception ex){ 
           System.out.println("Exception when reading or writing the request");
   ex.printStackTrace();
   }
  }

  public void doPost(HttpServletRequest request,
                      HttpServletResponse response) {
	  this.doGet(request,response);
  }
}
Dein Servlet musst du noch in der web.xml kenntlich machen. Folgende Zeilen musst du hinzufügen:

Das Servlet sollte dich nun zur gewünschten Seite weiterleiten.
Code:
<servlet>
      <servlet-name>ControllerServlet</servlet-name>
      <description></description>
      <servlet-class>deinpackage.ControllerServlet</servlet-class>
 </servlet>
<servlet-mapping>
    <servlet-name>ControllerServlet</servlet-name>
    <url-pattern>/servlet/ControllerServlet</url-pattern>
</servlet-mapping>
 

ernst

Top Contributor
Kann man es auch wie folgt abfragen?

String s;
s=request.getParameter("suchen");

s bekommt den Wert
SUCHEN
(also das was im Formular mit value angegeben wurde),
wenn das Such-Button angeklickt wurde.


mfg
Ernst
 

donnar

Mitglied
Ja, das kannst du auch so abfragen. Aber beachte, dass request.getParameter() nur innerhalb der Methode doGet funktioniert.
 

ernst

Top Contributor
donnar hat gesagt.:
Ja, das kannst du auch so abfragen. Aber beachte, dass request.getParameter() nur innerhalb der Methode doGet funktioniert.
1)
Wie kann man dann es innerhalb der Methode doPost() machen?

2)
Als ich versucht habe dies innerhalb von doPost() zu machen mit:
---------------------
String s;
s=request.getParameter("suchen");
System.out.println("suchen= "+s);
---------------------
kommt als Bildschirmausgabe:
suchen= null

mfg
Ernst
 
M

maki

Gast
>> wenn ich einen Button abfangen möchte, erstelle ich für jeden ein eigenes Form, wobei auch jeder Button ein eigenes hidden Field besitzt:

Viel zu umständlich, man kann jedem Button ein eigenen namen geben.
Dann reicht ein eine form.
 

ernst

Top Contributor
maki hat gesagt.:
>> wenn ich einen Button abfangen möchte, erstelle ich für jeden ein eigenes Form, wobei auch jeder Button ein eigenes hidden Field besitzt:

Viel zu umständlich, man kann jedem Button ein eigenen namen geben.
Dann reicht ein eine form.

Das glaube ich mittlerweile nicht mehr, denn:

1)
Formular (HTML-Datei) des Client:
<html>
<head>
<title>Datenerfassung</title>
</head>
<body>
<h1>Datenerfassung</h1>
<form action="http://localhost:8080/db2/Austausch" method="get">
Artikelnummer: <input type=text name="Artikelnummer" size=40>

Bezeichnung: <input type=text name="Bezeichnung" size=40>

Bestand: <input type=text name="Bestand" size=40>

Preis: <input type=text name="Preis" size=40>

<input type=submit name="einfuegen" value="EINFÜGEN">
<input type=submit name="suchen" value="SUCHEN">
</form>
</body>
</html>


2)
Quellcode in meinem Servlet (in der doGet-Methode):
...
Enumeration paramNames=request.getParameterNames();
while(paramNames.hasMoreElements()){
String paraN = (String) paramNames.nextElement();
System.out.println("Parameter="+paraN);
}
...
liefert folgende Bildschirmausgabe (auf dem Fenster des Tomcat):
Parameter=Bezeichnung
Parameter=Preis
Parameter=einfuegen
Parameter=Bestand
Parameter=Artikelnummer


Offensichtlich werden nur die Daten _eines_ submit-Buttons übertragen.
Oder wo habe ich einen Fehler gemacht?

mfg
Ernst
 
G

Guest

Gast
maki hat gesagt.:
>> wenn ich einen Button abfangen möchte, erstelle ich für jeden ein eigenes Form, wobei auch jeder Button ein eigenes hidden Field besitzt:

Viel zu umständlich, man kann jedem Button ein eigenen namen geben.
Dann reicht ein eine form.


Beruf: SW Entwickler so lügt man sich selbst an
 

ernst

Top Contributor
donnar hat gesagt.:
Ja, das kannst du auch so abfragen. Aber beachte, dass request.getParameter() nur innerhalb der Methode doGet funktioniert.
1)
Nein. Ich arbeite gerade nur mit doPost und getParameter() funktioniert ohne Probleme:

2)
Ich habe folgendes herausgefunden:
Wenn man mehrere submit-Buttons in einem Formular hat, dann wird beim Versenden _nur_ der Name des Buttons verschickt, das angeklickt wurde (die Namen der anderen submit-Buttons werden nicht versendet).
Im Servlet bekommt man das heraus, indem man die Methode getParameterNames() benutzt.

mfg
Ernst
 
M

maki

Gast
>> Wenn man mehrere submit-Buttons in einem Formular hat, dann wird beim Versenden _nur_ der Name des Buttons verschickt, das angeklickt wurde (die Namen der anderen submit-Buttons werden nicht versendet).

Richtig!

So reicht eine einzige form.

Etwas umständlicher wird das ganze, wenn man lokalisierte Namen für die Buttons verwendet.

>> Beruf: SW Entwickler so lügt man sich selbst an

Ach, ein feiger Gast mehr oder weniger, wieso sollte irgendwer auf so jemanden hören?
 

ernst

Top Contributor
Richtig!

So reicht eine einzige form.

Etwas umständlicher wird das ganze, wenn man lokalisierte Namen für die Buttons verwendet.
Meinst du so, wie in einem meiner letzten Beiträge (siehe einer meiner letzten Postings):
...
<input type=submit name="einfuegen" value="EINFÜGEN">
<input type=submit name="suchen" value="SUCHEN">
...
(weiters dazu: siehe einer meiner letzten Postings)

mfg
Ernst
 
M

maki

Gast
>> Meinst du so, wie in einem meiner letzten Beiträge (siehe einer meiner letzten Postings):

So in der Art.
Wenn ich mich recht erinnere zeigen Button und Input Elemente da ein leicht unterschiedliches Verhalten, bei ersterem Name=value.

Würde ich dir empfehlen dich in ein Framwework (zB. struts) einzuarbeiten, das fertige Lösungen für solche und viele andere Probleme liefert und ausführlich dokumentiert ist.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
OnDemand Wann welcher Scope aus welchem Paket? Allgemeines EE 10
S Welcher Java EE Applikationserver für RESTful Webservice? Allgemeines EE 2
T Java CMS Entwicklung : Welcher Weg ist besser? Allgemeines EE 9
G Welcher Applikationsserver Allgemeines EE 3
G welcher Appserver wird verwendet Allgemeines EE 4
J Axis Client - Welcher JARs mitliefern? Allgemeines EE 5
MQue RequestDispatcher nach Submit Allgemeines EE 2
J struts: Bild als submit-button Allgemeines EE 2
clemson HTML Taglib - mehrere Submit-Buttons & Internationalisie Allgemeines EE 4
M image für submit button Allgemeines EE 3
B mehrere submit-buttons in einer jsp Allgemeines EE 11
Dimax JSP Auf button click java methode ausführen.Ist das möglich? Allgemeines EE 6
L Button Handling in JSP mit Java-Backend Allgemeines EE 2
S JSF Button in panelGroup Allgemeines EE 2
MQue Servlet / Button Allgemeines EE 5
A jsf: Link hinter Button verschecken Allgemeines EE 2
A JSF: Welchen Button in Tabelle gedrückt? Listener? Allgemeines EE 2
J Problem mit Zurück-Button Allgemeines EE 2
S Button kleiner als Textfeld mit gleicher Höhe Allgemeines EE 8
M JSF: Wie Refresh der Seite bei Click auf Button verhindern? Allgemeines EE 4
G Methodenaufruf über Klick auf Button Allgemeines EE 3
C Servlet von Button aus starten Allgemeines EE 2
A IE gibt bei jedem Button einen Requestparameter Allgemeines EE 2
T Problem, Image-Button geht nur nicht im Internet Explorer Allgemeines EE 6

Ähnliche Java Themen

Neue Themen


Oben