web-dev-qa-db-fra.com

lire les données de formulaire dans la servlet. données postées avec la méthode post et servlet appelé avec? q = test1

Hé, j'essaie de lire les données de formulaire dans une servlet envoyée avec la méthode post. Et le servlet s'appelle OnlineExam?q=saveQuestion. Maintenant, le servlet fonctionne comme:

public class OnlineExam extends HttpServlet {
protected void doGet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
if(request.getParameter("q").equals("saveQuestion")){
                /*
                 * Save the question provided with the form as well as save the uploaded file if any.
                 */
                saveQuestion(request);
            }
}

protected void doPost(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
//      doGet(request, response);
        saveQuestion(request);
    }
public String saveQuestion(HttpServletRequest request){         
        System.out.println(request.getParameter("question"));

        return "";

    }       
}

Formulaire HTML:

<form action="OnlineExam?q=saveQuestion" method="post">
        <fieldset>
        <legend>Question</legend>
        <textarea class="questionArea" id="question" name="question">Enter Question.</textarea>
        <br class="clearFormatting"/>               
        <input class="optionsInput" value="optionA" name="optionA" onfocus = "clearValues('optionA')" onblur = "setValues('optionA')"/>
        <br class="clearFormatting"/>

        <input class="optionsInput" value="optionB" name="optionB" onfocus = "clearValues('optionB')" onblur = "setValues('optionB')"/>
        <br class="clearFormatting"/>

        <input class="optionsInput" value="optionC" name="optionC" onfocus = "clearValues('optionC')" onblur = "setValues('optionC')"/>
        <br class="clearFormatting"/>

        <input class="optionsInput" value="optionD" name="optionD" onfocus = "clearValues('optionD')" onblur = "setValues('optionD')"/>
        <br/>
        <input class="optionsInput" value="answer" name="answer" onfocus="clearValues('answer')" onblur="setValues('answer')"/>     
        <input type="submit" value="Save" />
        <input type="reset" value="Cancel" />
        <button style="display: none" onclick="return deleteQuestion()" >Delete</button>
        </fieldset>
        </form>

Quelqu'un peut-il donc illustrer comment la servlet est appelée? Je veux dire quel est le flux de contrôle, c’est-à-dire comment les choses fonctionnent dans cette servlet. 

Et comment pourrais-je lire le param1 dans servlet.

ps: je ne veux pas poster de formulaire avec la méthode get.

8
vinit

Vous devriez obtenir la valeur q dans votre doPost et non dans votre doGet. Comme vous utilisez method="post", dans le servlet, la doPost est celle qui a appelé pas la doGet. Supprimez le code dans votre doGet puis insérez-le dans doPost. Et vous doPost doit être quelque chose comme le code ci-dessous.

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    if(request.getParameter("q").equals("saveQuestion")){
        saveQuestion(request);
    }
}
6
ace

Est-ce résolu?

Je suis confronté au même problème. J'ai essayé 

Enumeration paramNames = request.getParameterNames();
while(paramNames.hasMoreElements()) {
    System.out.println((String)paramNames.nextElement());
}

et il montre 0 élément, donc les données de formulaire ne sont pas lues par servlet.

J'ai eu la réponse dans un autre fil. enctype=multipart/form-data était la cause. Après l'avoir retiré du formulaire, il était capable de lire les données.

4
Mohit Verma

si vous POST données à la servlet. doPost sera invoqué.

Dans doPost(), vous pouvez accéder à des paramètres de requête tels que

request.getParameter("param1");
4
Jigar Joshi

Lorsque vous cliquez sur le bouton "Soumettre" de votre formulaire, la méthode doPost de votre servlet est appelée. Cette procédure est dictée par la méthode que vous avez insérée dans le "formulaire" de votre page HTML. Les paramètres d'URL (q = saveQuestion) seront toujours disponibles pour votre code dans la méthode doPost. Vous semblez avoir l’impression que les paramètres d’URL seront traités par la méthode doGet et les paramètres de formulaire par la méthode doPost. Ce n'est pas le cas.

1
DaveH

Je sais que c’est un vieux fil de discussion, mais je n’ai pas trouvé de réponse à cette question lors de la recherche; je publie donc ma solution pour une personne qui risque d’avoir le même problème avec la nullité des paramètres de formulaire dans la fonction dopost de leur servlet.

J'ai eu un problème similaire à obtenir des valeurs NULL lors de l'utilisation de request.getParameters ("param1"); les fonctions. Après des heures de jeu, je me suis rendu compte que le paramètre que j'utilisais était l'identifiant de la balise d'entrée que je demandais. C'était faux. J'ai dû utiliser l'attribut NAME de la balise input pour obtenir la valeur correcte de la zone de saisie. C'était tout ce que c'était. Je devais juste ajouter un nom et obtenir le paramètre en utilisant ce nom et cela corrigeait le problème.

J'espère que ça aide quelqu'un.

1
Travis
doPost() {
  processRequest(request, response);
  //to do
}

Supprimez/commentez processRequest(request, response) et essayez à nouveau. Maintenant, vous ne devriez pas obtenir de valeurs nulles.

0
Milan-SJ

Essayez le code ci-dessous request.getParameter("param1");

0
Gnanz