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

Struts 1 Java Discussion :

[html:select][html:options] pb de submit


Sujet :

Struts 1 Java

  1. #1
    wazup
    Invité(e)
    Par défaut [html:select][html:options] pb de submit
    j'ai un formulaire dans lequel je veux mettre une liste multiselectable

    couplée à une collection dans mon formbean.

    je veux donc qu'au load, elle charge la liste avec ma collection et qu'au submit, elle prenne les éléments sélectionnés pour remettre à jour ma collection.

    mon jsp contient donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <label for="maCollection"><bean:message key="label.Formulaire.maCollection"/></label><br>
    <html:select property="maCollection" size="6" multiple="true">
    	<html:options property="maCollection"/>
    </html:select>
    Tout ceci marche bien au chargement, maliste est initialisée avac la collection,

    mais lorsque je fait un submit, je merécupère :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    01:52:19,826 DEBUG [BeanUtils]   setProperty(net.forms.MyBodyForm@161f39e, maCollection, [marc.dupont@wanadoo.fr,mdupont@aol.com])
    01:52:19,826 DEBUG [ConvertUtils] Convert string 'marc.dupont@wanadoo.fr' to class 'java.util.Collection'
    01:52:19,826 DEBUG [ConvertUtils]   Using converter org.apache.commons.beanutils.converters.StringConverter@1961581
    01:52:19.831 WARN!! Exception for /appli/do/MonFormWrite
    java.lang.IllegalArgumentException: argument type mismatch
    Donc apparemment, chaque entrée de la liste est interprétée comme une collection et non comme un string de la collection.

    Quelqu'un a-t-il une idée ?

    PS
    getter/setter côté form :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public Collection getMaCollection() {
    	return MaCollection(;
    }
     
    public void setMaCollection((Collection newCollection() {
    	this.MaCollection = new ArrayList();
    	for (Iterator ite = newCollection.iterator(); ite.hasNext();) {
    		this.MaCollection.add(ite.next());
    	}
    }

  2. #2
    wazup
    Invité(e)
    Par défaut
    bon ben je vais me répondre tout seul !

    Il faut donc intercepter la requete dans le Form.Reset() et remplir soi-même la collection avec les parameters values de la requete apparemment..

    Bof, pas terrible, mais ça marche au moins, a titre d'info.

  3. #3
    Membre régulier
    Inscrit en
    Mars 2004
    Messages
    103
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mars 2004
    Messages : 103
    Points : 78
    Points
    78
    Par défaut
    public void setMaCollection((Collection newCollection() {
    this.MaCollection = new ArrayList();
    for (Iterator ite = newCollection.iterator(); ite.hasNext() {
    this.MaCollection.add(ite.next());
    }
    }
    Juste par curiosité, est-ce que ca marche ton bout de code ?
    J'aurais fait un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public void setMaCollection(Collection newCollection) {
       this.maCollection = newCollection;
    }
    A ma connaissance, ca marche.

    Pour remplir une liste avant d'afficher le formulaire, la convention veut qu'on utilise l'Action qui appelle le formulaire (avant le forward vers le formulaire, tu peux spécifier les valeurs initiales du formulaire) par des
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    MonFormulaire monForm = (MonFormulaire) form;
    form.setXXX(...);

  4. #4
    wazup
    Invité(e)
    Par défaut
    Oui, pour le setter, tu as raison, mais là n'est pas le problème.

    (les deux marchent, la différence tient à ce que ton setter ne renvoie qu'une référence sur la collection déjà exxistante, alors que pour d'autres raisons, j'ai besoin d'une recopie en profondeur, maus passons)

    Pour le reste, effectivement, tu as raison aussi, quoique je n'ai pas essayé.

    C'est effectivement plus conventionnel que de redéfinir le Reset(), mais je trouve que les actions doivent être les plus simples possible, surtout pour faire du populate de formulaire.

    En fait, au lieu de décortiquer les paramètres du POST dans l'action, je le fait dans le validatorForm.reset()

    Merci!

  5. #5
    Membre expérimenté
    Avatar de RanDomX
    Profil pro
    sans
    Inscrit en
    Mars 2003
    Messages
    579
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mars 2003
    Messages : 579
    Points : 1 407
    Points
    1 407
    Par défaut
    il y a deux choses:

    1/ tu utilises mal le tag html:options -> tu devrais regarde html:optionsCollection

    2/ ds la méthode reset tu dois systématiquement vider la collection pour qu'elle ait une taille nulle.


    @+

  6. #6
    wazup
    Invité(e)
    Par défaut
    Oui, finalement en regardant la doc du <html:options> j'ai vu que le problème venait tout smplement du fait que

    j'ai utilisé un ArrayList().

    En utilisant un String[], il n'y a plus de problème et effectivement je peux à présent être "propre" en vidant tout dans Reset(), et sans rajouter de boucle dans Action.execute(..).

    Par contre, je maintiens que le tag <html:optionsCollection> n'est pas nécessaire ici.

Discussions similaires

  1. taglib Stuts HTML:SELECT et HTML:OPTION integrant des images
    Par struts-intermediaire dans le forum Struts 1
    Réponses: 1
    Dernier message: 09/12/2010, 16h16
  2. comment récupérer l'option choisie avec html:select
    Par fakhita dans le forum Struts 1
    Réponses: 18
    Dernier message: 24/07/2007, 17h08
  3. [Débutant][<html:select>]options mises à jour dynamiquement
    Par anayathefirst dans le forum Struts 1
    Réponses: 10
    Dernier message: 23/01/2007, 21h24
  4. Réponses: 6
    Dernier message: 22/09/2006, 10h01
  5. [HTML][Select]désactiver une option sous IE ?
    Par tiPouick dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 05/11/2004, 12h13

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