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

JSF Java Discussion :

[Affichage dynamique] Jsf + Vector<object> d'une bdd


Sujet :

JSF Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 4
    Par défaut [Affichage dynamique] Jsf + Vector<object> d'une bdd
    Hello,

    Après avoir cherche, je ne trouve pas vraiment de solution a mon problème.

    Je récupère une bdd dans un vecteur d'objet en réflexivité.
    Chaque table a son propre bean.

    --> Categorie(id,name) ; Users(id,firstName,lastName,..) ; Product(id,name,price,..)

    J'ai donc un vector<object> contenant toute ma bdd.
    Je souhaiterai afficher via jsp cette bdd dans un tableau.

    Le code Jsp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <h:form id="describe">
           <x:dataTable value='#{user.data}' var='data'>
                   <h:column>
    			   		<f:facet name="header" >
    						<h:outputText value="email"/>
    					</f:facet>
    					<h:outputText value='#{data.firstName}' />
    					<h:outputText value='#{data.lastName}' />
    					<h:outputText value='#{data.email}' />
                    </h:column> 
           </x:dataTable>
    </h:form>
    Le code java - Vector<Object> data correspond au {user.data} du 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
    26
    27
    28
    29
    30
    31
     
    private Vector<Object>	  data;
     
    /** remplissage du vector **/
    private Object[]                        read(String table)
    {
    	table                           = Tools.capitalize(table);
            String modelsStr                = new String("pack.");
     
    	if (table.substring(0, modelsStr.length()).equals(modelsStr))
            	table = table.substring(modelsStr.length());
     
            ArrayList<Object> list  	= new ArrayList<Object>();
            String[] columnsNames   	= this.getTableColumnsName(table);
            try
            {
    		Class myTableAssociatedClass = Class.forName("pack." + table);
     		this.myResultSet 	= this.myState.executeQuery("SELECT * FROM " + table + ";");
            	while (this.myResultSet.next()) //incremente aussi l'index pour la lecture des donnees
          		{
                    	Object target 	= myTableAssociatedClass.newInstance(); 
                            for (int i = 0; i < columnsNames.length; ++i)
                            	if (!this.isForeignKey(table, columnsNames[i]))
                                    	BeanUtils.setProperty(target, columnsNames[i], this.myResultSet.getString(columnsNames[i]));
                            list.add(target);
                    }
            }
            catch (Exception e) {Tools.err(e.getLocalizedMessage());} 
     
           return list.toArray(new Object[]{});
    }
    Le soucis c'est que je ne parviens pas a cast data, pour lui faire afficher les données dans je jsp.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    --> ((Vector<user>)data).lastName
    Merci d'avance d'une éventuelle aide.

  2. #2
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Par défaut
    Bonjour,

    Premier point : utilise des List plutôt que des Vector.

    Second point : Pourquoi souhaites-tu stocker dans une même liste des objets de types différents ?

    Je te conseille plutôt de disposer d'une List<Category> pour tes catégories, d'une List<User> pour tes utilisateurs et enfin d'une List<Product> pour tes produits.

    Ainsi ce sera beaucoup plus clair pour toi, tu utiliseras les generics d'une façon plus propre, et tu ne devrais ainsi plus avoir de problème de cast...
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 4
    Par défaut
    Hello,

    Merci d'avoir pris le temps de regarder.

    J'ai pense a cette solution, mais je me demandai si il etait possible grace aux tag/EL de jsf d'afficher mon vecteur d'objet.

    Merci encore.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 4
    Par défaut
    Citation Envoyé par romaintaz Voir le message
    Je te conseille plutôt de disposer d'une List<Category> pour tes catégories, d'une List<User> pour tes utilisateurs et enfin d'une List<Product> pour tes produits.
    Dans ce cas je fais comment pour mon read, il me retourne un objet. Je doit bien faire un cast quelque part.

    Le but étant de garder le read reflexif.

  5. #5
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Par défaut
    Je trouve cette solution quand même un peu lourde. Mais rien ne t'empêche de modifier ta méthode read afin qu'elle retourne 3 List plutôt qu'une seule.

    Sinon, tu peux créer une interface, mettons MonObjet, qui sera implémentée par les 3 autres classes (Product, Category et User). Ensuite, tu ajoutes dans cette interface des méthodes qui permettent de dire si l'objet est de tel ou tel type.

    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public interface MonObjet {
        boolean isUser();
        boolean isCategory();
        boolean isProduct();
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public class User implements MonObjet {
        public boolean isUser() { return true; }
        public boolean isCategory{ return false; }
        public boolean isProduct() { return false; }
     
        public String getEmail() { return this.email; }
        ...
    }
    Ainsi, dans le code JSF tu pourras faire quelque chose du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <h:outputText value="#{record.email}" rendered="#{record.user}"/>
    Ainsi, l'appel à getEmail() ne sera fait que pour les objets returnant true à la méthode isUser().

    Quant à ton cast, tu n'en as plus besoin directement, car ta méthode read ne retourne désormais plus une List<Object> mais une List<MonObjet>.

    Mais au final, je trouve ça toujours plus compliqué que 3 méthodes read qui retournent chacune une List d'un type donné. Eventuellement, tu peux faire en sorte que chaque de ces 3 méthodes appellent une 4e méthode read qui soit générique...
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 4
    Par défaut
    C'est un peut sale. Mais j'ai opte pour cette solution, merci bien.
    Mais il n'existe pas d'autres méthode plus propre utilisant la réflexivité ?

  7. #7
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Par défaut
    Bah je vois pas trop ce que tu pourrais avoir de plus propre.

    Pour moi, la réflexion (on dit réflexion, pas réflexivité ), ce n'est pas forcément à utiliser n'importe où...
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  8. #8
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    Citation Envoyé par romaintaz Voir le message
    Bah je vois pas trop ce que tu pourrais avoir de plus propre.

    Pour moi, la réflexion (on dit réflexion, pas réflexivité ), ce n'est pas forcément à utiliser n'importe où...
    Exact..et en plus, une mauvaise utilisation de la réflexion peut donner des problèmes de performance.

    Il y'a beaucoup plus simple, la base de la programmation OO, composition, héritage...

Discussions similaires

  1. Réponses: 3
    Dernier message: 29/09/2014, 08h23
  2. Réponses: 0
    Dernier message: 15/08/2014, 12h20
  3. Réponses: 1
    Dernier message: 25/04/2006, 17h45
  4. [VB.NET] - affichage dynamique dans un tableau
    Par karibouxe dans le forum ASP.NET
    Réponses: 8
    Dernier message: 20/06/2005, 15h07
  5. affichage dynamique en fonction des données en base
    Par jengo dans le forum Bases de données
    Réponses: 1
    Dernier message: 28/10/2004, 10h22

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