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] Problème formulaire avec Collection


Sujet :

Spring Web Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    54
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2003
    Messages : 54
    Points : 37
    Points
    37
    Par défaut [Spring MVC] Problème formulaire avec Collection
    Hello !

    J'ai très bien compris comment faire un formulaire de saisie/édition avec un seul objet java adossé au formulaire, mais j'échoue lamentablement dès que j'ai une collection d'objets à éditer dans mon formulaire.

    Voici le code concret :
    - formulaire.jsp
    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
    23
    24
    25
    <!-- Formulaire de saisie -->
    <form method="post">
    			<strong>Cochez les produits à reprendre : </strong>
    			<br />
    			<br />
    			<table border="0">
    				<tr>
    				<th>Date</th>
    				<th>Produit</th>
    				<th>Code</th>
    				<th>Qté</th>
    				</tr>
    				<c:forEach var="repriseProduit" items="${reprisesProduits}">
    					<tr>
    					<td><dt:format pattern="dd/MM/yyyy">${repriseProduit.date.time}</dt:format></td>
    					<td><c:out value="${repriseProduit.nom_produit}"/></td>
    					<td><c:out value="${repriseProduit.code}"/></td>
    					<td><c:out value="${repriseProduit.quantite}"/></td>
    					<td><input type="checkbox" name="repriseProduit.checked" value="true"></td>
    					</tr>	
    				</c:forEach>
    			</table>
    	<input type="submit" value="Valider">
    	<a href="<c:url value="/reprises_labo.html?action=list"/>">Annuler</a>
    </form>
    -Controleur [SimpleFormController] :
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
    	// Prépare le formulaire à afficher
    	@Override
    	protected Object formBackingObject(HttpServletRequest request) throws Exception {
    		// on retrouve le code du labo dans le contexte de session
    		String codeLabo = ((Labo)request.getSession(false).getAttribute("infosLabo")).getCode_gross_fourn();
     
    		// On recherche les produits à reprendre
    		Collection reprisesProduits = servicePg.getReprisesLabo(codeLabo);
     
    		// on retourne l'objet
    		return reprisesProduits;
     
    	}
     
     
    	// binder pour la date
    	@Override
    	protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) throws Exception {
    		// création d'un format de date
    		SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");
     
    		// format strict
    		format.setLenient(false);
     
    		// on enregistre un éditeur de propriétés String (dd/MM/yyyy) - java.util.Date
    		// CustomDateEditor est fourni par Spring
    		// la date pourra être vide (2ième paramètre de CustomDateEditor)
    		binder.registerCustomEditor(java.util.Date.class, null, 
    				new CustomDateEditor(format, true));
    	}
     
     
    	// exécution de la commande
    	@Override
    	protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, Object command, BindException errors) throws Exception {		
     
    		// On retrouve l'objet command
    		Collection reprisesProduits = (Collection) command;
     
    		// on archive les produits cochés
    		Collection<Object> reprises = new ArrayList<Object>();
    		for (Iterator iter = reprisesProduits.iterator(); iter.hasNext();) {
    			RepriseProduit element = (RepriseProduit) iter.next();
    			// Si coché, on l'archive
    			if (element.getChecked()){
    				reprises.add(element);
    				System.out.println("Elément coché : " + element);
    			}
    		}
     
    		// et on redirige vers reprises_labo
    		return new ModelAndView(new RedirectView("/reprises_labo.html?action=list", true));
     
    	}
     
    }
    -S-servlet.xml
    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
     
    	<bean id="Commandes.ControllerReprisesLaboArchive" 
    		class="net.baboutini.commandes.web.ControllerReprisesLaboArchive">
    		<property name="sessionForm">
    			<value>true</value>
    		</property>
    		<property name="commandName">
    			<value>reprisesProduits</value>
    		</property>
    		<property name="formView">
    			<value>reprises_labo_archive</value>
    		</property>
    		<property name="servicePg">
    			<ref bean="servicePg"/>
    		</property>
    	</bean>
    Quand j'affiche la page, j'ai bien ma liste de produits avec les cases à cocher vides à côté. Je coche certaines cases et rien n'est pris en compte quand je valide le formulaire, les produits ont toujours leur attribut checked à false alors que la case à cocher devrait le leur mettre à "true".

    Je ne vois pas bien où est l'erreur.

    Merci d'avance pour vos conseils,

    Arnaud

  2. #2
    ego
    ego est déconnecté
    Rédacteur

    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    1 883
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 883
    Points : 3 510
    Points
    3 510
    Billets dans le blog
    2
    Par défaut
    je ne suis pas une bête en JSP mais je crois qu'il n'y a aucune raison pour que tes objets soient remplis via les clicks sur la page !!
    Pour faire cela, utilises peut-être la librairie de tags SPRING et le tag spring:bind ??

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <td><spring:bind path="command.name">
      <input name="name" value="<c:out value="${status.value}"/>">
      <span class="error"><c:out value="${status.errorMessage}"/></span>
      </spring:bind>
    </td>
    Le bouquin Pro Spring est très bien et possède pleins d'exemples

Discussions similaires

  1. Spring MVC + JSP : Formulaire avec 3 boutons submit
    Par JQueen dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 04/11/2014, 12h48
  2. [Spring MVC] Problème d'encoding
    Par aloha dans le forum Spring Web
    Réponses: 6
    Dernier message: 22/11/2010, 14h56
  3. [Spring MVC] Problème de formulaire
    Par dominou73 dans le forum Spring Web
    Réponses: 5
    Dernier message: 15/08/2007, 08h55
  4. [Spring MVC] Problèmes avec SimpleFormController"s"
    Par SuperGandalf dans le forum Spring Web
    Réponses: 2
    Dernier message: 13/06/2007, 10h38
  5. [Spring MVC] problème SimpleFormController
    Par sothea dans le forum Spring Web
    Réponses: 1
    Dernier message: 15/05/2007, 17h38

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