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 :

dataTable dynamique avec des composants graphiques dynamiques


Sujet :

JSF Java

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2002
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 24
    Points : 13
    Points
    13
    Par défaut dataTable dynamique avec des composants graphiques dynamiques
    Bonjour,

    J'aimerai créer une dataTable dans mon code java. La difficulté est que j'aurai des objects dans mon tableau de type différents. Suivant le type que j'aurai, je voudrai afficher un composant graphique différent.
    ex : si j'ai un attribut boolean dans mon object, je voudrai afficher un checkbox, alors que si j'ai un enum, je voudrai afficher une liste déroulante.

    ce que j'aurai dans ma jsp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <sfx_h:dataTable value="#{myBean.myList}" var="myItem" 
    binding="#{myBean.dynamicDataTable}"/>
    ce que je voudrai obtenir comme affichage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    entete1    | entete2
    ----------------------
    outputText | checkbox
    --------------------------
    outputText | selectOneMenu

    Est-ce que quelqu'un a déjà fait ca ?

    Merci.

  2. #2
    Expert éminent
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Points : 7 679
    Points
    7 679
    Par défaut
    Bonjour.
    Veux tu s'il te plaît nous montrer la déclaration du type de la variable d'itération du tableau ? Càd le type des éléments de myBean.getMyList().

    Merci.

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2002
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 24
    Points : 13
    Points
    13
    Par défaut
    Voilà, ce que j'ai essayé. Je mets tout le code de mon bean. En gras, ce que tu m'as demandé. Chaque MyBeanRowXXX étend MyBeanRow qui est un pojo et ne rajoute qu'une nouvelle propriété d'un type différent :

    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
    public class MyBeanRow {
        private boolean selection;
        private String libelle;
        private boolean derogeable;
        private String libelleParametre;
     
        public MyBeanRow() {
            super();
            // TODO Auto-generated constructor stub
        }
     
        public MyBeanRow(boolean selection, String libelle, boolean derogeable, String libelleParametre) {
            super();
            this.selection = selection;
            this.libelle = libelle;
            this.derogeable = derogeable;
            this.libelleParametre = libelleParametre;
        }....
     
    getter-setter...
    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    public class MyBean {
    
        // Init -------------------------------------------------------------
    
        private List myList;
        private List headers; // Optional.
        private HtmlDataTable dynamicDataTable;
    
        // Actions ----------------------------------------------------------
    
        @SuppressWarnings("unchecked")
        public void loadMyList() {       
            // Set headers (optional).
            headers = new ArrayList();
            headers.add("sélection");
            headers.add("libelle");
            headers.add("derogeable");
            headers.add("libelleParametre");
            headers.add("value");
            
            MyBeanRowChampSaisi row1 = new MyBeanRowChampSaisi(true, "libelle1", true, "paramètre1", "value");
            MyBeanRowDate row2 = new MyBeanRowDate(false, "libelle2", true, "paramètre2", new Date());
            MyBeanRowListeDeroulante row3 = new MyBeanRowListeDeroulante(true, "libelle3", false, "paramètre3", Boolean.TRUE.toString());
            
            myList = new ArrayList();
            myList.add(row1);
            myList.add(row2);
            myList.add(row3);
        }
    
        @SuppressWarnings("unchecked")
        public void populateDynamicDataTable() {
            
            // Any columns?
            if (myList != null && myList.size() > 0) {
                dynamicDataTable = new HtmlDataTable();
    
                // Get amount of columns.
                int columns = headers.size();
    
                // Set columns.
                for (int i = 0; i < columns; i++) {
                    
                    // Set header (optional).
                    UIOutput header = new UIOutput();
                    header.setValue(headers.get(i));
    
                   
                    //Set column.
                    UIColumn column = new UIColumn();
                    column.setHeader(header);
                    
                    switch(i){
                        case 0 : HtmlSelectBooleanCheckbox checkbox = new HtmlSelectBooleanCheckbox();
                            ValueBinding mycheck = FacesContext.getCurrentInstance().getApplication().createValueBinding("#{myItem.selection}");
                            checkbox.setValueBinding("value", mycheck);
                            column.getChildren().add(checkbox);
                            break;
                        case 1 : UIOutput output = new UIOutput();
                            ValueBinding myItem = FacesContext.getCurrentInstance().getApplication().createValueBinding("#{myItem.libelle}");
                            output.setValueBinding("value", myItem);
                            column.getChildren().add(output);
                            break;
                        case 2 : HtmlSelectOneMenu selectOneMenu = new HtmlSelectOneMenu();
                            
                            UISelectItems mesItems = new UISelectItems();
                            List<SelectItem> listeSelectItem = new ArrayList<SelectItem>();
                            listeSelectItem.add(new SelectItem("", ""));
                            listeSelectItem.add(new SelectItem(Boolean.TRUE, Boolean.TRUE.toString()));
                            listeSelectItem.add(new SelectItem(Boolean.FALSE, Boolean.FALSE.toString()));
                            mesItems.setValue(listeSelectItem);
                            
                            selectOneMenu.getChildren().add(mesItems);
                            
                            ValueBinding derogeable = FacesContext.getCurrentInstance().getApplication().createValueBinding("#{myItem.derogeable}");
                            selectOneMenu.setValueBinding("value", derogeable);
                            
                            column.getChildren().add(selectOneMenu);
                            break;
                        case 3 : UIOutput outputParam = new UIOutput();
                            ValueBinding myItemParam = FacesContext.getCurrentInstance().getApplication().createValueBinding("#{myItem.libelleParametre}");
                            outputParam.setValueBinding("value", myItemParam);
                            column.getChildren().add(outputParam);
                            break;
                        case 4 : 
                            UIOutput output2 = new UIOutput();
                            ValueBinding bind = FacesContext.getCurrentInstance().getApplication().createValueBinding("#{myItem}");
    //                        output.setValueBinding("value", myItem);
                            
    //                        output2.setValue(bind.getType(FacesContext.getCurrentInstance()).getName());
                            output2.setValue(dynamicDataTable.getRowData().getClass().getName());
                            column.getChildren().add(output2);
                            break;
                        default : break;
                    }
    
                    
                    
                    // Add column.
                    dynamicDataTable.getChildren().add(column);
                }
            }
        }
    
        // Getters ----------------------------------------------------------
    
        public List getMyList() {
            return myList;
        }
    
        public HtmlDataTable getDynamicDataTable() {
            if (dynamicDataTable == null) {
                loadMyList(); // Reload to get most recent data.
                populateDynamicDataTable();
            }
    
            return dynamicDataTable;
        }
    
        // Setters ----------------------------------------------------------
    
        public void setMyList(List myList) {
            this.myList = myList;
        }
    
        public void setDynamicDataTable(HtmlDataTable dynamicDataTable) {
            this.dynamicDataTable = dynamicDataTable;
        }
    
    }


    La question que tu me poses, représente exactement mon problème.
    Je peux avoir des objets de type différents (dans mon exemple seulement la dernière propriété est différente). Et je voudrai mettre une représentation approprié suivant le type que je vais avoir.

  4. #4
    Expert éminent
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Points : 7 679
    Points
    7 679
    Par défaut
    Bonsoir.
    Une solution possible serait d'ajouter à ton BeanRow un champ type de type entier par exemple.

    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
     
    public class MyBeanRow {
        private boolean selection;
        private String libelle;
        private boolean derogeable;
        private Object libelleParametre;
        private int type;
     
        public MyBeanRow() {
            super();
            // TODO Auto-generated constructor stub
        }
     
        public MyBeanRow(boolean selection, String libelle, boolean derogeable, Object libelleParametre) {
            super();
            this.selection = selection;
            this.libelle = libelle;
            this.derogeable = derogeable;
            this.libelleParametre = libelleParametre;
            this.type = type;
        }....
     
    getter-setter...
    Remarque aussi que j'ai remplacé le type de libellParametre par Object au lieu de String ... il le faut pour ce qui va suivre !

    ensuite, dans ta page, tu peux faire (mais je te préviens, c'est pas vraiment du propre ...)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <sfx_h:dataTable value="#{myBean.myList}" var="myItem" >
      <h:column>
         <h:outputText value="#{myItem.libelle}" />
      </h:column>
     
      <h:column>
         <h:selectBooleanCheckBox value="#{myItem.libelleParametre}" rendered="#{myItem.type==0}" />
     
         <h:selectOneMenu value="#{....}" rendered="#{myItem.type==1}" />
     
         etc.
      </h:column>
    </sfx_h:dataTable>
    Voilou. Bonne chance.

  5. #5
    Membre à l'essai
    Inscrit en
    Avril 2002
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 24
    Points : 13
    Points
    13
    Par défaut
    Tout d'abord, merci pour ton aide.

    En dernier recours, je pensais effectivement m'orienter vers cette solution.

    Par curiosité, sais-tu s'il est possible de créer une dataTable par programmation en y ajoutant composant graphique par composant graphique ?

    Encore merci de ton aide.

Discussions similaires

  1. Insérer des composants graphiques dynamiques dans une JSP
    Par wafabrj dans le forum Servlets/JSP
    Réponses: 14
    Dernier message: 22/05/2012, 11h31
  2. [XL-2003] Graphique dynamique avec des zéros en début de série
    Par bolide7 dans le forum Excel
    Réponses: 4
    Dernier message: 12/04/2010, 20h35
  3. Graphique dynamique avec choix des données à comparer
    Par jktec dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 08/04/2008, 13h39
  4. une page jsp avec des controles graphique dynamiques
    Par capello123 dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 14/12/2007, 16h37
  5. Erreur EACCESSVIOLATION avec des compsts créés dynamiquement
    Par tsikpemoise dans le forum Bases de données
    Réponses: 4
    Dernier message: 28/02/2004, 19h05

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