Ne forme avec enctype=“multipart/form-data” cause des problèmes d'accès à un champ caché
J'ai créé un formulaire masqué élément
<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>
Et je suis en train d'essayer d'obtenir la valeur de cette ligne dans un servlet (comme je l'ai fait avant):
int objId = Integer.parseInt(request.getParameter("imgUploadObjId"));
Mais je reçois ce (ligne 33 est la ligne ci-dessus):
java.lang.NumberFormatException: null
java.lang.Entier.parseInt(Source Inconnue)
java.lang.Entier.parseInt(Source Inconnue)
web.objets.UploadImage.doPost(UploadImage.java:33)
javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
Est-il quelque chose de différent à propos d'un formulaire avec enctype="multipart/form-data"? Ou pouvez-vous voir une autre erreur.
Vous devez vous connecter pour publier un commentaire.
La servlet analyse les paramètres par défaut à l'aide de
application/x-www-form-urlencoded
encodage. Lemultipart/form-data
encodage n'est cependant pas pris en charge dans les servlets jusqu'à Servlet 3.0. LegetParameter()
appels seront tous de retournull
.Dans le Servlet 3.0, vous devriez avoir utilisé
HttpServletRequest#getParts()
au lieu d'obtenir de toutes les parties d'unmultipart/form-data
demande, notamment des champs de formulaire. Avant de Servlet 3.0, vous devriez avoir utilisé Apache Commons FileUpload pour analysermultipart/form-data
demandes. Voir aussi la réponse suivante pour un exemple détaillé de deux approches: Comment télécharger des fichiers vers le serveur à l'aide de JSP/Servlet?Notez que si vous n'utilisez pas tout
<input type="file">
terrain à tous, alors vous pouvez simplement laisser le codage loin de la<form>
. Ensuite, il sera par défaut àapplication/x-www-form-urlencoded
.enctype
attribut si le fichier de téléchargement n'est pas nécessaire.Comme une solution de contournement, vous pouvez également ajouter l'paramètres cachés que les paramètres GET dans l'attribut action:
cela permettra à la
request.getParameter("imgUploadObjId")
appel à travailler.Il y a en effet quelque chose de différent.
request.getParameter
ne fonctionne que pour codé en dur les paramètres d'URL spécifiée dansaction
attribut de<form>
élément. Dans votre cas, il ne contient pas tout.Tous les autres paramètres seront incoded dans le formulaire lui-même, qui vous avez à traiter par l'analyse de la requête HTTP du flux d'entrée directement.
Heureusement, vous n'êtes pas le premier et il ya quelques bonnes bibliothèques open-source, qui prennent soin de cela.
J'ai été en utilisant Apache FileUpload. Vous créez un analyseur et passer un objet de requête et puis itérer sur les différents articles. L'un d'eux sera votre champ caché.
La partie multi-codage ne doit pas affecter le texte masqué. Il est probable que quelque chose d'autre. Pouvez-vous poster plus de l'HTML/Servlet code?
Ne sais pas si cela aide, mais j'ai utilisé plusieurs parties de formulaires dans les pages jsp qui sont soumis à une servlet, struts et ces pages ont caché les champs qui sont reçus dans mes jambes de suspension classes d'Action (enveloppé dans Struts ActionForm), donc je ne pense pas qu'il y est tout dur de s'arrêter ici.
Avez-vous essayé de la réception de cette valeur en tant que Chaîne et voir ce qui vient réellement de là?
Vous devriez vérifier la servlet code lui-même. Êtes-vous le demande? Vous pouvez déboguer l'application, afin de voir quelles variables sont présentes dans l'environnement lorsque vous essayez d'obtenir la valeur et de l'analyser.
Je n'ai eu l'id atttribute définie pour le champ et il n'apparaît pas dans la Liste des éléments de liste. Quand j'ai ajouté le nom de l'attribut, il a montré jusqu'à.