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 :

Tableau double entree String[][]


Sujet :

Struts 1 Java

  1. #1
    Membre régulier
    Inscrit en
    Août 2004
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 171
    Points : 97
    Points
    97
    Par défaut Tableau double entree String[][]
    Bonjour,

    EDIT : j'ai essayer d'être suffisament claire; du coup ça fait un gros pavé, j'espere ne pas vous faire fuire, car dans le fond c'est pas tres compliqué.

    Je souhaite disposer d'un formulaire a double entree, graphiquement c'est un tableau dont le nombre de lignes et de colonnes sont dynamiques.

    Jusqu'a present on (dans notre équipe de dev.) faisait l'hypothese que le nombre de colonne maximal était borné à 10 par exemple et on définisait 10 attribut dans le bean
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <form-bean name="autorisationForm"   type="org.apache.struts.action.DynaActionForm">
      <form-property name="role0" type="java.util.ArrayList"/>
      <form-property name="role1" type="java.util.ArrayList"/>
      <form-property name="role2" type="java.util.ArrayList"/>
    ....
    </form-bean>
    Mais la je cherche plutot a utiliser un attribut du type java.lang.String[][].
    J'ai donc défini mon form bean ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <form-bean name="autorisationForm"   type="org.apache.struts.action.DynaActionForm">
      <form-property name="roles" type="java.lang.String[][]"/>....
    </form-bean>
    Sauf que la, mon serveur démarré plus, struts n'a pas l'air d'aimé.
    Mais apparement l'attribut Type, ne sert que à controler que le type de l'objet que je pousse dans le formulaire est compatible, j'ai donc essayer de le contourner en mettant java.lang.Object en tant que Type.
    Et la je parviens bien a remplir mon formulaire depuis mon controler; mais a l'affichage avec le code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <!-- Je ne suis plus sûre du code, car ici on utilise un autre lot de tags qui surcharge struts... -->
    <html:textarea property="roles[i][j]/>"
    J'obtiens : dans mes input-text : [Ljava.lang.String;@19dfbff..

    Apres avoir regarder plus en profondeur, Struts utilise la fameuse méthode PropertyUtils#getProperty(Object, name) pour récupérer la valeur du formulaire
    Et j'ai donc fait la petite experience suivante :
    Déclaration d'un "MiniBean"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public class MiniBean {
       private String[][] tab;
       //avec getter/setter
       ...
       public void init() {
         tab = new String[][] { new String[] { "Salut" } };
       }
    }

    Puis le code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    MiniBean mini = new MiniBean();
    mini.init();
    System.out.println(PropertyUtils.getProperty(mini, "tab[0][0]"));
    Et la grande tristesse j'obtiens : [Ljava.lang.String;@19dfbff

    En gros il ignore la seconde dimension de mon tableau.
    Donc en gros ça parait apparement impossible
    Est ce que j'ai oublié quelque chose ou es ce réélement impossible?

    Merci

  2. #2
    Membre averti Avatar de florentB
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2006
    Messages
    332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Décembre 2006
    Messages : 332
    Points : 441
    Points
    441
    Par défaut
    Je ne sais pas si ca va t'aider, mais j'ai jeté un coup d'oeil sur ce que retourne le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PropertyUtils.getProperty
    , et il s'agit d'un objet. Essaie de la caster en String pour voir ce que ca dit ...

  3. #3
    Membre régulier
    Inscrit en
    Août 2004
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 171
    Points : 97
    Points
    97
    Par défaut
    L'objet retourner est une java.lang.String[], il va donc me planter un ClassCastException si je le cast...

  4. #4
    Expert éminent

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Points : 7 778
    Points
    7 778
    Par défaut
    Pour que l'affichage fonctionne correctement, il suffit de définir la propriété roles de type String[][] dans une ActionForm avec getter et setter sans oublier de l'initialiser dans la méthode reset.

    Et l'affichage via :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <html:textarea property="roles[i][j]"/>
    devrait se faire sans problème.

    Par contre, pour pouvoir récupérer la valeur du champ après modification, je ne connais pas d'autre moyen que d'utiliser les propriétés indexées ou les tags nested.
    Et pour cela, il faut utiliser une collection de JavaBeans et non un tableau à deux dimensions.
    Modératrice Java - Struts, Servlets/JSP, ...

  5. #5
    Membre régulier
    Inscrit en
    Août 2004
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 171
    Points : 97
    Points
    97
    Par défaut
    il suffit de définir la propriété roles de type String[][] dans une ActionForm avec getter et setter
    C'est bien ce que j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <form-bean name="autorisationForm"   type="org.apache.struts.action.DynaActionForm">
      <form-property name="roles" type="java.lang.String[][]"/>....
    </form-bean>
    Avec l'analyse que j'en ai faite, ça ne peut fonctionner, en tout cas pas en utilisant la classe DynaActionForm telle qu'elle.

    Peut etre que en utilisant un ActionForm classique ça fonctionnerait mais j'en doute.
    Merci quand meme

  6. #6
    Expert éminent

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Points : 7 778
    Points
    7 778
    Par défaut
    Je faisais référence à une ActionForm et non à une DynaActionForm.
    Modératrice Java - Struts, Servlets/JSP, ...

Discussions similaires

  1. [XL-2010] Fonction Retourner un tableau a double entree
    Par Lnmex dans le forum Excel
    Réponses: 1
    Dernier message: 09/04/2014, 03h03
  2. Longueur tableau double entree
    Par Mrezechiel dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 06/07/2011, 16h08
  3. Afficher un tableau associatif a double entree
    Par student_ dans le forum Langage
    Réponses: 2
    Dernier message: 28/11/2010, 10h40
  4. convertir un tableau de type string en type double
    Par saraenim dans le forum Windows Forms
    Réponses: 8
    Dernier message: 12/05/2008, 15h45
  5. XSLT : representation HTML en tableau double entree
    Par samouille666 dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 02/06/2006, 20h18

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