Hat Form mit enctype = „multipart / form-data“ zu Problemen führen ein verstecktes Feld Zugriff

StackOverflow https://stackoverflow.com/questions/2827778

Frage

Ich habe ein verstecktes Formularelement erstellt

<form name="UploadImage" enctype="multipart/form-data" method="post" action="UploadImage">
    <label>
        </label>
    <input name="imgUploadObjId" id="imgUploadObjId" value="52" type="hidden">

    //rest of the form here

</form>

Und ich versuche, den Wert mit dieser Linie in einem Servlet zu erhalten (wie ich schon getan haben):

int objId = Integer.parseInt(request.getParameter("imgUploadObjId"));

Aber ich bekomme diese (Linie 33 ist die Linie, oben):

  

java.lang.NumberFormatException: null
              java.lang.Integer.parseInt (Unknown Source)       java.lang.Integer.parseInt (Unknown Source)       web.objects.UploadImage.doPost (UploadImage.java:33)       javax.servlet.http.HttpServlet.service (HttpServlet.java:637)       javax.servlet.http.HttpServlet.service (HttpServlet.java:717)

Gibt es etwas anderes über ein Formular mit enctype = "multipart / form-data"? Oder können Sie sehen, einige andere Fehler.

War es hilfreich?

Lösung

Das Servlet analysiert die Parameter standardmäßig mit application/x-www-form-urlencoded Codierung. Die multipart/form-data Codierung wird jedoch nicht bis in Servlet 3.0 . Die getParameter() Anrufe werden alle Rückkehr null.

In Servlet 3.0, sollten Sie verwendet haben, HttpServletRequest#getParts() stattdessen alle Teile eines multipart/form-data Anfrage zu bekommen, einschließlich der normalen Formularfelder. Vor der Servlet 3.0, sollten Sie Apache Commons Fileupload Parse multipart/form-data Anfragen verwendet haben. Siehe dazu auch die folgende Antwort für ein detailliertes Beispiel für beide Ansätze: Wie zum hochladen von Dateien auf Server mit JSP / Servlet?

Beachten Sie, dass, wenn Sie kein <input type="file"> Feld überhaupt nicht verwenden, dann können Sie nur aus dem <form> der Codierung weg verlassen. Es wird dann auf application/x-www-form-urlencoded Standard.

Andere Tipps

Als Abhilfe können Sie auch die erforderlichen versteckten Parameter als GET-Parameter in dem action-Attribute des Formulars hinzufügen:

<form name="UploadImage" enctype="multipart/form-data" method="post" action="UploadImage?imgUploadObjId=52">

    //rest of the form here

</form>

das wird die request.getParameter("imgUploadObjId") Aufruf an die Arbeit ermöglichen.

Tatsächlich gibt es etwas anders aus.

request.getParameter funktioniert nur für hartcodierte URL-Parameter angegeben in action Attribute <form> Elements. In Ihrem Fall enthält es nicht.

Alle anderen Parameter werden in die Form selbst werden incoded, die Sie bearbeiten müssen durch Parsing HTTP-Anforderung des Eingangsstroms direkt an.

Zum Glück sind Sie nicht der Erste, und es gibt einige gute Open-Source-Bibliotheken, die sich darum kümmern.

Ich habe mit Apache Fileupload . Sie erstellen einen Parser und übergeben ein Request-Objekt, um es und dann durchlaufen verschiedene Artikel. Einer von ihnen wird Ihr verborgenes Feld sein.

Die mehrteilige Codierung sollte nicht die Textfelder versteckt. Es ist wahrscheinlich etwas anderes. Können Sie mehr von dem HTML / Servlet-Code posten?

Nicht sicher, ob das hilft, aber ich habe mehrteilige Formulare in JSP-Seiten verwendet, die zu einem Streben Servlet abgegeben und diese Seiten haben versteckte Felder, die in meiner Struts Action-Klasse empfangen werden (eingewickelt in Struts Actionform), so dass ich don‘ t glaube, es gibt keinen harten Anschlag hier.

Haben Sie diesen Wert als String versucht, zu empfangen und zu sehen, was es eigentlich geht?

Sie würden überprüfen Sie die Servlet-Code selbst. Erhalten Sie die Anfrage? welche Variablen sind in der Umgebung können Sie die App, um zu debuggen, um zu sehen, wenn Sie versuchen, den Wert zu erhalten und es zu analysieren.

Ich hatte nur das id-Attribut-Set für das Feld und es zeigte sich nicht in der Liste Artikel Liste nach oben. Wenn ich den Namen Attribut hinzugefügt, es auftauchte.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top