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 Java Discussion :

Instanciation d'une liste d'objets


Sujet :

Spring Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 12
    Par défaut Instanciation d'une liste d'objets
    Bonjour,

    Je cherche à instancier une liste d'objet à l'aide de spring.

    Basiquement un objet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    package test;
    public class MiscObject {
    	private String code;
    	private String name;
    }
    ... la liste d'objet :
    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
     
    package test;
     
    import java.util.Iterator;
    import java.util.List;
     
    public class MiscObjectList {
     
    	private List<MiscObject> list;
     
    	public List<MiscObject> getList() {
    		return list;
    	}
     
    	public void setList(List<MiscObject> list) {
    		this.list = list;
    	}
     
    }
    Je n'arrive pas à trouver la syntaxe dans le fichier de config spring pour instancier ma liste d'objet et les objets sous-jacents. Je vois comment instancier une liste de valeur en tant qu'attribut mais pas une liste d'objet.

    Merci.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 12
    Par défaut
    Je vais préciser un peu mon besoin. Je m'attendrais à trouver cela dans mon fichier de config spring :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <bean id="MiscObjectListBean" class="test.MiscObjectList">
            <property name="list">
                <list>
                    instance de MiscObject
                    instance de MiscObject
                    instance de MiscObject
                    instance de MiscObject
                    instance de MiscObject
                </list>
            </property>
    </bean>
    Reste à trouver quoi mettre à la place de "instance de MiscObject".

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 141
    Par défaut
    Bonsoir tout le contenu du package java.util peut être obtenu à l'aide de la balise L'utilisation de la classe se fait de la manière suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <util:list id="list">
    		<value>1</value>
    		<value>2</value>
    		<value>3</value>
    		<value>4</value>
        </util:list>
    l'attribut remplace la méthode Mais pour que Spring puisse détecter le package java.util, il faut d'abord l'activer dans le conteneur en ajoutant les 3 lignes suivantes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xmlns:util="http://www.springframework.org/schema/util"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    http://www.springframework.org/schema/util 
    http://www.springframework.org/schema/util/spring-util-2.5.xsd
    La première désigne la localisation du schéma et doit être placée parmi les schémas de localisation. Les 2 dernières qui doivent être déclarées successivement désignent le schéma à suivre.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 12
    Par défaut
    Merci pour ces indications. Je vois pour les liste, mais mon problème vient du fait que dans chaque valeur je veux instancier un objet "complexe" (MiscObject avec 2 attributs String) anonyme.

    Je code donc mon fichier spring :
    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
     
    	<?xml version="1.0" encoding="UTF-8"?>
     
    <beans xmlns="http://www.springframework.org/schema/beans"
     
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    	xmlns:aop="http://www.springframework.org/schema/aop"
    	xmlns:util="http://www.springframework.org/schema/util"
     
    	xsi:schemaLocation="http://www.springframework.org/schema/beans 
    	                    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    						http://www.springframework.org/schema/util 
    						http://www.springframework.org/schema/util/spring-util-2.5.xsd
    	                    ">
     
    	<bean id="MiscObjectListBean" class="test.MiscObjectList" scope="singleton">
    		<property name="list">
    			<util:list id="list">
    			<value>
    				<bean class="test.MiscObject">
    					<property name="code"><value>LAX</value></property>
    					<property name="name"><value>Los Angeles</value></property>
    				</bean>
    			</value>
    			<value>
    				<bean class="test.MiscObject">
    					<property name="code"><value>PAR</value></property>
    					<property name="name"><value>Paris</value></property>
    				</bean>
    			</value>
    	    </util:list>
    		</property>		
    	</bean>
     
    </beans>
    Je reçois Exception in thread "main" org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 20 in XML document from class path resource [SpringMisc.xml] is invalid; nested exception is org.xml.sax.SAXParseException: cvc-complex-type.2.4.d: Invalid content was found starting with element 'bean'. No child element is expected at this point.

    Apparemment il n'accepte que des valeurs simples dans les balises value.

    Le code des mes classes est basique. MiscObject a deux attributs String (code et name) avec getters, setters et constructeur.

    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
     
    package test;
    public class MiscObject {
    	private String code;
    	private String name;
     
    	public MiscObject (String code,String name) {
    		this.code=code;
    		this.name=name;
    	}
     
    	public String getCode() {
    		return code;
    	}
    	public void setCode(String code) {
    		this.code = code;
    	}
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    }
    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
     
    package test;
     
    import java.util.Iterator;
    import java.util.List;
     
    public class MiscObjectList {
     
    	private List<MiscObject> list;
     
    	public MiscObjectList (List<MiscObject> list) {
    		this.list = list;
    	}
     
    	public List<MiscObject> getList() {
    		return list;
    	}
     
    	public void setList(List<MiscObject> list) {
    		this.list = list;
    	}
     
    }

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 141
    Par défaut
    Tu peux pas mettre la déclaration d'un bean à l'intérieur de la balise, c'est comme si tu faisais cette déclaration
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    List l=new ArrayList();
    l.add(String s=new String("B"));
    D'après la définition du conteneur léger, il permet de créer des objets par initialisation ou par dépendances. Garde toujours cette déclaration en tête quand tu veux déclarer un bean dans le conteneur de Spring. J'ai écrit un article dessus, mais je ne trouve pas ou le poster sur le site ca allait t'aider...
    Donc je te propose de créer tes beans à l'extérieur de la balise value puis les référencier dans la liste. Je pense qu'il faudra faire un truc de genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <value ref="nom_du_bean"> ou
    <value ref-local="nom_du_bean">
    .
    J'espère que ca va résoudre ton problème.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 12
    Par défaut
    Le truc c'est que je veux que les beans instanciés dans la liste restent anonymes, donc je ne veux par leur donner de nom.
    Un peu comme les inner beans classiques :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <bean id="outer" class="...">
      <!-- instead of using a reference to a target bean, simply define the target bean inline -->
      <property name="target">
        <bean class="com.example.Person"> <!-- this is the inner bean -->
          <property name="name" value="Fiona Apple"/>
          <property name="age" value="25"/>
        </bean>
      </property>
    </bean>
    http://static.springsource.org/sprin...s.html#3.3.2.3

    Cela dit j'ai finalement externalisé la création des beans MiscObject de la liste à l'aide d'un fichier lu par une méthode init de MiscObjectList. C'est sans doute plus propre et plus souple.

    Merci pour tes suggestions en tous cas.

Discussions similaires

  1. Réponses: 5
    Dernier message: 11/05/2006, 19h20
  2. Créer une liste d'objets statiques dans une classe
    Par crossbowman dans le forum C++
    Réponses: 3
    Dernier message: 13/03/2006, 09h11
  3. methode qui retourne une liste d'objets du meme type
    Par anoukhan dans le forum Oracle
    Réponses: 8
    Dernier message: 12/01/2006, 18h38
  4. Tri d'une liste d'objet CObList
    Par cjacquel dans le forum MFC
    Réponses: 1
    Dernier message: 13/07/2005, 13h50
  5. [MFC] Retourner une liste d'objets
    Par 1cado dans le forum MFC
    Réponses: 10
    Dernier message: 28/07/2003, 12h11

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