IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Spring Web Java Discussion :

[Spring MVC] recevoir tous les paramètres d'un formulaire dans une liste


Sujet :

Spring Web Java

  1. #1
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2010
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2010
    Messages : 29
    Points : 43
    Points
    43
    Par défaut [Spring MVC] recevoir tous les paramètres d'un formulaire dans une liste
    Bonjour,

    Je cherche à saisir les paramètres d'un formulaire en Spring MVC

    voici le formulaire en JSP
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    	<form action="/Simulateur/result.html" method="post">
    		<c:forEach items="${exam.questions}" var="question">
    			<p> ${question.text}</p>
    			<c:forEach items="${question.choices}" var="choice">
    				<input type="radio" name="${question.id}" value="${choice.id}"/> ${choice.text}<BR/>
    	    	</c:forEach>
    	    </c:forEach>
    		<input type="submit" value="OK" />
    	</form>
    en regardant le code source du formulaire, on a le code HTML généré suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    	<form action="/Simulateur/result.html" method="post">
     
    			<p> quest1</p>
     
    				<input type="radio" name="1" value="1"/> c1<BR/>
     
    				<input type="radio" name="1" value="2"/> c2<BR/>
     
    				<input type="radio" name="1" value="3"/> c3<BR/>
     
     
    			<p> quest2</p>
     
    				<input type="radio" name="2" value="4"/> c1<BR/>
     
    				<input type="radio" name="2" value="5"/> c2<BR/>
     
    				<input type="radio" name="2" value="6"/> c3<BR/>
     
     
    		<input type="submit" value="OK" />
    	</form>

    voici le controller

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    	@RequestMapping(value="/result.html", method = RequestMethod.POST)
    	public ModelAndView examResult(HttpServletRequest request) {
     
     
     
                    //ici j'essaie d'afficher un paramètre, mais celà me donne NULL
    		System.out.println(request.getAttribute("1"));
     
     
                    ModelAndView model = new ModelAndView("ResultPage");
    		model.addObject("result", "resultat");
     
    		return model;
    	}

    donc j'aurai besoin de savoir comment faire pour recevoir tous les paramètres du formulaire dans une liste. Comme çà je pourrai lire tous les paramètres dans une boucle for

    Merci d'avance

  2. #2
    Membre actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2007
    Messages
    256
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 256
    Points : 290
    Points
    290
    Par défaut
    Bonjour à vous,

    L'attribut d'une requête ne peut pas être transféré entre deux requêtes. Ce que vous souhaitez obtenir ici c'est un paramètre d'une requête.

    Si vous désirez simplement la liste des paramètres d'une reqête, il y a plusieurs façon de faire avec Spring MVC.

    Via HttpServletRequest (déconseillé) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    @RequestMapping(value = "/result.html", method = RequestMethod.POST)
    public String test(HttpServletRequest request) {
        Map<String, String[]> parameterMap = request.getParameterMap();
        //....
    }
    Via l'annotation @MatrixVariable (mieux) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    @RequestMapping(value = "/result.html", method = RequestMethod.POST)
    public String test(@MatrixVariable MultiValueMap<String, String> parameters) {
        //...
    }
    La première méthode est à proscrire car il est conseillé de ne pas utiliser HttpServletRequest/HttpServletResponse autant que possible. L'intérêt est, par exemple, une facilité pour créer des tests unitaires.

    Par contre, pour résoudre votre problème, il y a beaucoup mieux comme solution avec Spring MVC.

    Vous pouvez définir un simple DTO correspondant aux champs de votre vue.

    Par exemple, dans votre cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public class ExamenForm {
        private List<Question> questions;
     
        // getter & setter
    }
    Ensuite, vous pouvez créer directement obtenir cet objet dans votre méthode GET et l'initialiser selon vos désire.

    Cela donnerait ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    @RequestMapping(value = "/result.html", method = RequestMethod.GET)
    public String getResultPage(@ModelAttribute ExamenDTO examenDTO) {
        List<Question> questions = ...;
        examenDTO.setQuestions(questions);
        //....
    }
    Et enfin, lorsque vous souhaitez récupérer les différentes valeurs d'un formulaire, c'est exactement pareil que precédemment.
    Lorsque Spring voit que vous souhaitez recevoir en argument un objet de type ExamenDTO annoté avec @ModelAttribute, il va créer une nouvelle instance de cette classe et tenter de la remplir avec les valeurs reçues en paramètres de requête.

    S'il n'en trouve pas, l'objet n'est simplement pas remplis, sinon, il contient les valeurs du formulaire.

    Et enfin, si vous utiliser JSP ou Thymeleaf pour générer votre html, vous avez des balises spring permettant de donner les bons noms aux différents champs et faire en sorte qu'il pré-remplis avec les valeurs définie dans l'objet dans le controller.

    Bonne journée.

Discussions similaires

  1. Lister tous les mois et années contenu dans une période
    Par wyzer dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 17/06/2011, 16h07
  2. [SP-2007] Afficher tous les événements d'un site dans une webpart
    Par rui75020 dans le forum SharePoint
    Réponses: 11
    Dernier message: 07/10/2010, 08h48
  3. Réponses: 1
    Dernier message: 01/12/2009, 09h48
  4. Réponses: 3
    Dernier message: 10/08/2009, 17h39
  5. Trouver tous les retours à la ligne contenus dans une table
    Par Philofish dans le forum Langage SQL
    Réponses: 1
    Dernier message: 04/08/2008, 22h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo