matthis: Problem: method="post" liefert keine Parameter an das Servlet

Moin moin,

ich habe ein Problem bei einem method="post" an das Servlet. Betrachte ich im eclipse-Debugger den HttpServletRequest sind keine Parameter in der parameterMap enthalten. Auch wenn ich per Firebug den Netzwerktraffic überwache, wird kein Parmameter übermittelt.

Hier meine Form aus der JSP:

  
<form id="actionForm" method="post" action="mail" name="actionForm" >  
   <div>  
      <input type="hidden" id="deleteFilter" />  
      <input type="button" value="Löschen" title="Filter löschen"  
				class="deletebutton" onclick="del()" />  
      <input type="submit" id="actionSubmit" value="sub" title="Filter löschen" class="deletebutton" style="display: none;"/>  
   </div>  
</form>  

Die Funktion (del()) die eine Eintrag aus einer multiselectbox löscht:

  
function del() {  
	var delIds = "";  
	var first = true;  
	for (i = 0; i < document.listForm.filterList.length; i++) {  
		var option = document.listForm.filterList.options[i];  
			if (option.selected == true)  
				if (first) {  
					delIds = option.value;  
					first = false;  
				} else {  
					delIds = ", " + option.value;					  
				}  
			}  
		var field = document.getElementById("deleteFilter");  
		field.value = delIds;  
		var submit = document.getElementById("actionSubmit");  
		submit.click();  
}  

Danke im vorraus.

Gruß Matthis

  1. Mahlzeit matthis,

    ich habe ein Problem bei einem method="post" an das Servlet. Betrachte ich im eclipse-Debugger den HttpServletRequest sind keine Parameter in der parameterMap enthalten.

    Formulardaten werden als "name"->"value"-Paare übertragen, d.h. jedes Formularelement wird mit seinem Namen als Schlüssel und seinem Wert als Nutzdaten an den Server weitergegeben.

    <input type="hidden" id="deleteFilter" />
          <input type="button" value="Löschen" title="Filter löschen"
    class="deletebutton" onclick="del()" />
          <input type="submit" id="actionSubmit" value="sub" title="Filter löschen" class="deletebutton" style="display: none;"/>

    Ich sehe bei Deinen Formularelementen kein einziges, das einen Namen hat ... works as designed.

    Was genau sollte der Browser auch an den Server übertragen?

    Danke im vorraus.

    Gerrn geschehen.

    MfG,
    EKKi

    --
    sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
    1. Danke für die schnelle Antwort.

      Habe mal name's eingefügt, hat leider nicht weitergeholfen.
      Vielleicht noch eine andere Idee ?

      Gruß Matthis

      1. hi,

        Habe mal name's eingefügt, hat leider nicht weitergeholfen.
        Vielleicht noch eine andere Idee ?

        Ja: form action="?"

        ? Hier möchte ein Request_Uri (RU) stehen, der wenigstens mit einem Slash beginnt oder voll qualifiziert ist like https://example.org/path. Scheme kann entfallen, wenn es in der action mit dem RU des Forms übereinstimmt.

        ? Es mag ohne Slash funktionieren, aber erstens würde ich mich nicht darauf verlassen und zweitens funktioniert es spätestens, wenn mod_rewrite im Spiel ist, nicht mehr zuverlässig.

        Hotti

        --
        Wenn was schief gehen kann, geht es schief.
        1. Moin!

          hi,

          Habe mal name's eingefügt, hat leider nicht weitergeholfen.
          Vielleicht noch eine andere Idee ?

          Ja: form action="?"

          ? Hier möchte ein Request_Uri (RU) stehen, der wenigstens mit einem Slash beginnt oder voll qualifiziert ist like https://example.org/path. Scheme kann entfallen, wenn es in der action mit dem RU des Forms übereinstimmt.

          Nein, "mail" ist eine absolut valide relative URL. Sieht zwar komisch aus, funktioniert aber. Denk dir einfach nur mal .php^H^Hl^H^Hhtml hintendran, um ein gewöhntes Bild hinzukriegen.

          ? Es mag ohne Slash funktionieren, aber erstens würde ich mich nicht darauf verlassen und zweitens funktioniert es spätestens, wenn mod_rewrite im Spiel ist, nicht mehr zuverlässig.

          Aber sicher doch!

          Deine Fehleranalysen waren noch nie schlechter...

          - Sven Rautenberg

          1. min,

            Deine Fehleranalysen waren noch nie schlechter...

            Die können auch nur das bewerten, was gepostet wurde. Dass mod_rewrite dahinterstecken könnte ist natürlich nur eine Vermutung, aber grundsätzlich sind relative action-Notes ein schlechter Stil und eine schlechte Angewohnheit außerdem.

            Beispiel, wo relative Pfadangaben nicht funktionieren:

            Ich schicke Dir einen URL für eine Restschnittstelle
              https://example.org/rest/sven

            womit Du die Preislisten in /herren/badehosen auf dem Laufenden halten kannst.

            Am Server kommt als RU an: /rest/sven und wird per Rewrite auf ein Script geleitet. Das Verzeichnis /rest/sven gibt es nur virtuell, also nicht etwa im FS. Das Script jedoch wertet den RU aus, guckt in die DB und weiß, dass es dazu ein Formular erzeugen muss, für den Upload der Preislisten. Tja, jetzt die Frage nach der action-Note ;) Relativ, wenn ja, relativ zu??

            PS: Es immer wieder bemerkenswert, wie Bastler sich des Themas ereifern. Das ist so wie bei den Amateurfotografen, die von schlechten Gläsern reden, weil sie Aufnahmen mit 1/1000s nicht wackelfrei hinbekommen.

            Hotti

            1. Hi,

              Dass mod_rewrite dahinterstecken könnte ist natürlich nur eine Vermutung, aber grundsätzlich sind relative action-Notes ein schlechter Stil und eine schlechte Angewohnheit außerdem.

              Erzähl doch nicht schon wieder so einen Unfug.

              Beispiel, wo relative Pfadangaben nicht funktionieren:

              Lediglich ein weiteres Beispiel, wo du etwas nicht auf die Reihe kriegst.

              Tja, jetzt die Frage nach der action-Note ;) Relativ, wenn ja, relativ zu??

              Wie relative Adressangaben aufgelöst werden, ist ganz klar definiert.
              Lese es bitte nach, wenn auch das zu den Themen gehört, von denen du keine Ahnung hast.

              PS: Es immer wieder bemerkenswert, wie Bastler sich des Themas ereifern.

              Viel erstaunlicher ist, wie viel Blödsinn du hier immer erzählst.

              MfG ChrisB

              --
              RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
              1. Hi,

                Viel erstaunlicher ist, wie viel Blödsinn du hier immer erzählst.

                Das erstaunt dich noch? :-)

                SCNR,
                Christopher

            2. Moin!

              Beispiel, wo relative Pfadangaben nicht funktionieren:

              Ich schicke Dir einen URL für eine Restschnittstelle
                https://example.org/rest/sven

              womit Du die Preislisten in /herren/badehosen auf dem Laufenden halten kannst.

              Du spielst zuviel Buzzword-Bingo. REST-Schnittstelle... soso.

              Am Server kommt als RU an: /rest/sven und wird per Rewrite auf ein Script geleitet. Das Verzeichnis /rest/sven gibt es nur virtuell, also nicht etwa im FS. Das Script jedoch wertet den RU aus, guckt in die DB und weiß, dass es dazu ein Formular erzeugen muss, für den Upload der Preislisten. Tja, jetzt die Frage nach der action-Note ;) Relativ, wenn ja, relativ zu??

              Punkt 1: Eine REST-Schnittstelle implementiert in der Regel die HTTP-Methoden GET, PUT, DELETE und ggf. POST. Wenn ich also über die gegebene URL REST-Operationen machen würde, würde ich erwarten, dass ich direkt ein PUT mit dem Dateiupdate vornehmen kann.

              Deshalb kommen wir zu Punkt 2: Wozu brauch ich ein Formular? GET auf die URL der REST-Schnittstelle liefert mir Content - üblicherweise den, den man mit den anderen Operationen schreibend bearbeiten kann.

              Bei einem GET auf die URL würde ich also keinesfalls ein Uploadformular erwarten.

              Aber selbst wenn... Punkt 3: Die relative URL in der Formular-Action basiert immer auf der zum Laden des Formulars genutzten URL. Rewriting ist irrelevant. Genauso wie dein Verweis auf "/herren/badehosen" - spielt bei der Betrachtung keinerlei Rolle, ist absolut nebensächlich.

              Wenn die URL also "/rest/sven" ist, wird eine Action "mail" zur Formular-URL "/rest/mail" führen.

              PS: Es immer wieder bemerkenswert, wie Bastler sich des Themas ereifern. Das ist so wie bei den Amateurfotografen, die von schlechten Gläsern reden, weil sie Aufnahmen mit 1/1000s nicht wackelfrei hinbekommen.

              Die hohe Kunst der SELF-Beleidigung. Hast du prima hingekriegt, fühlst dich aber vermutlich nicht selbst angesprochen.

              - Sven Rautenberg

              1. moin Sven,

                Wenn die URL also "/rest/sven" ist, wird eine Action "mail" zur Formular-URL "/rest/mail" führen.

                Genau. Relative Pfadangaben in href="", action="" sind immer relativ zum URL/Path der Seite, in der sie notiert sind.

                Wurde vom Fragesteller Letzteres geposted? Nein. Es wurde nach Ideen gefragt und mein Rewrite-Beispiel macht es anschaulich, woran es liegen könnte.

                PS: Es immer wieder bemerkenswert, wie Bastler sich des Themas ereifern. Das ist so wie bei den Amateurfotografen, die von schlechten Gläsern reden, weil sie Aufnahmen mit 1/1000s nicht wackelfrei hinbekommen.

                Die hohe Kunst der SELF-Beleidigung. Hast du prima hingekriegt, fühlst dich aber vermutlich nicht selbst angesprochen.

                Sicher doch ;)

                Wenn früher die Fotos unscharf waren, lag es daran, dass ganz früher mehr Silber in den Filmen war als früher. In den heutigen Kameras ist überhaupt kein Film mehr drin!!11

                Hotti

            3. Es immer wieder bemerkenswert, wie Bastler sich des Themas ereifern. Das ist so wie bei den Amateurfotografen, die von schlechten Gläsern reden, weil sie Aufnahmen mit 1/1000s nicht wackelfrei hinbekommen.

              Hier wird Ihnen geholfen.

      2. Moin!

        Danke für die schnelle Antwort.

        Habe mal name's eingefügt, hat leider nicht weitergeholfen.
        Vielleicht noch eine andere Idee ?

        Installier dir Firebug in den Firefox und guck im Tab "Netzwerk" nach, welcher Request da tatsächlich mit welchen Parametern rausgeht.

        Alternativ: Ändere übergangsweise die Methode in "GET" und guck in der URL nach, welche Parameter dein Browser als zusammensetzbar ansieht.

        Was mich an deinem Formularcode stört, ist halt die Abwesenheit von name-Attributen. Und die Anwesenheit von id-Attributen. Und dummerweise hast du nur erzählt, du hättest jetzt welche eingebaut, hast aber den Quelltext nicht wieder gezeigt, damit wir kontrollieren können, was genau du da denn gemacht hast.

        Bedenke, dass je nach Browser name- und id-Attribute den gleichen Namensraum einnehmen, sich daher blöde überlagern, und deshalb clientseitig ein Problem darstellen. Ich persönlich würde für den Zugriff auf Formularelemente niemals getElementById einsetzen, weil Formularelemente schon lange vor dessen Erfindung im DOM zugreifbar gewesen sind - und das funktioniert auch heutzutage noch prima, und es ist nicht zu erwarten, dass das mal weniger wird.

        Spannend finde ich auch den Ansatz, dass du zum Abschicken des Formulars einen sichtbaren type="button" einfügst, der dann mit Javascript auf den unsichtbaren submit-Button "klickt". Warum rufst du nicht direkt die submit()-Methode des Formulars auf und sparst dir diesen unsichtbaren Button? Wenn du irgendwelche weiteren Datenfelder benötigst, gibts ja type="hidden".

        - Sven Rautenberg