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 :

Accès à une case d'un tableau via l'index


Sujet :

JSF Java

  1. #1
    Membre régulier Avatar de maVariable
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    164
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 164
    Points : 105
    Points
    105
    Par défaut Accès à une case d'un tableau via l'index
    Hello,

    j'utilise actuellement un tableau de tableau dans mes bean, et j'aimerais pouvoir les afficher proprement avec JSF.

    En clair, j'ai : un objet_1 qui contient un tableau d'objet_2. Et chaque objet_2 contient un tableau de String.

    ce que j'ai réussit à faire était assez simple : j'accédais au premier tableau (provenant de l'objet_1) grace à une rich:datatable, et chaque colonne était mappée à la propriété : maList (provenant d'un objet_2). Je trichais un peu avec le getMaList en incrémentant l'index à chaque appel, de sorte qu'il sorte la valeur suivante. Si il atteint la fin, il recommence au début, par sécurité.

    la méthode getMalist() provenant de objet_2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public String getMaList() {
    		//get only one object of the ArrayList, according to the index, automatically incrmented
    		if ( (this.indexForGet + 1) < this.nbColumns){
    				this.indexForGet++;
    			}else{
    				this.indexForGet = 0;
    			}
    		}
    		return resultPSList.get(indexForGet);
    	}
    ma page 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
     
    ....
    ......
    <rich:dataTable 	id="datatableRF"
                             binding="#{monBean.view.dataTable}"				value="#{monBean.listObjet}" var="element">
    			<rich:column>
    					<core:facet name="header">
    						<core:verbatim>1</core:verbatim>
    					</core:facet>
    					<html:outputText value="#{element.maList}"/>
    			</rich:column>
    			<rich:column>
    					<core:facet name="header">
    						<core:verbatim>2</core:verbatim>
    					</core:facet>
    					<html:outputText value="#{element.maList}"/>
    			</rich:column>
    .....
    ...
    Ca marchait vraiment bien, toutes les références étaient nickel. Jusqu'à ce que j'essaye de faire des sortBy et des filterBy. Jsf ne sait plus trop ou donner de la tête, notemment pasque toutes les output des colonnes sont "textuelement" bindé au même objet maList. D'ou confusion ! :cry

    Bref, j'aimerais donc changer un peu ma méthode d'accès, et je voudrais savoir si il est possible d'accéder à la valeur d'un tableau, via un output, en lui indiquant l'index ?
    un peu un truc comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <h:outputText value="#{monBean.maList[0]}"/>
    j'ai cherché du coté des f:param, mais ce n'est pas très concluant pour l'instant...
    un tiens vaut pas mieux que zéro tu l'auras pas

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    en suivant ta logique, il faut te débarasser de ta "triche" et remplacer #{element.malist} en #{element.malist[0]}, #{element.malist[1]}, etc:

    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
    ......
    <rich:dataTable id="datatableRF" binding="#{monBean.view.dataTable}" value="#{monBean.listObjet}" var="element">
    			<rich:column>
    					<core:facet name="header">
    						<core:verbatim>1</core:verbatim>
    					</core:facet>
    					<html:outputText value="#{element.maList[0]}"/>
    			</rich:column>
    			<rich:column>
    					<core:facet name="header">
    						<core:verbatim>2</core:verbatim>
    					</core:facet>
    					<html:outputText value="#{element.maList[1]}"/>
    			</rich:column>
    .....
    ...
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public List getMaList() {
    		return resultPSList;
    	}

  3. #3
    Membre régulier Avatar de maVariable
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    164
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 164
    Points : 105
    Points
    105
    Par défaut
    Yeaaaah génial merci tchize_ !

    je savais pas qu'on pouvait faire ca, dire que j'ai cherché des solutions dix fois plus compliqueés ! je n'avais pas encore vu ce type d'accès auparavant, je croyais que ca correspondait forcément à des tag param




    et... en poussant un peu plus loin, y'a t il moyen de faire quelque chose de ce genre dans la page JSP :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <%for (int i=0;i<20;i++){%>
    			<rich:column>
    				<core:facet name="header">
    					<core:verbatim>0</core:verbatim>
    				</core:facet>
    				<html:outputText value="#{element.maList[<%i%>]}" />
    			</rich:column>		
    <%}%>
    ou encore

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <%for (int i=0;i<20;i++){%>
    			<rich:column>
    				<core:facet name="header">
    					<core:verbatim>0</core:verbatim>
    				</core:facet>
    				<html:outputText value="#{element.maList[{0}]}" />
                                                       <core:param value="<%i%>"/>
    			</rich:column>		
    <%}%>

    Je sais que ces deux manière ne marchent pas (création de colonne ok, mais dès que je met le <%i%> il est bcp moins content)... dommage..pasque j'ai environ 100 colonnes à écrire, et je trouve un peu moche de faire 100 copier/coller
    un tiens vaut pas mieux que zéro tu l'auras pas

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    si tu veux itérer sur les colomnes, si ma mémoire est bonne, y a un composant richfaces qui peut le faire: a4j:repeat. Essaie de mettre un column dans le repeat

    Sinon, tu peux toujours utiliser simplement 2 a4j:repeat imbriqués, et écrire toi même les tags tr,td,table

  5. #5
    Membre régulier Avatar de maVariable
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    164
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 164
    Points : 105
    Points
    105
    Par défaut
    hello,

    merci pour ta réponse. J'ai tenté une approche par ce tag, mais le petit problème, c'est qu'il me fait lui même une itération, sans me laisser le choix de mettre mon tag richfaces column. Or je me suis précisément bien cassé la tête depuis plusieurs jours pour pouvoir les utiliser (surtout pour les filtre et trie) Enfin pour l'instant je n'ai pas réussi...

    J'avais simplifié mes bout de code pour les afficher ici, histoire de les rendre pluis facile à lire. Ci dessous mon code complet, pour que tu te rende compte de ce que j'utilise vraiment (y compris un richFaces datatable, avec onRowMouseOver) :

    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
     
    ..
    .....
    ...........
    <rich:dataTable id="datatableRF" onRowMouseOver="this.style.backgroundColor='#FFFF33'" onRowMouseOut="this.style.backgroundColor='#FFFFFF'" binding="#{monBean.view.dataTable}"
    	value="#{monBean.listObjet}" var="element" border="1">
    		<rich:column filterBy="#{element.maList[0]}" filterEvent="onkeyup" sortBy="#{element.maList[0]}">
    				<core:facet name="header">
    				       <core:verbatim></core:verbatim>
    				</core:facet>
    			        <html:outputText value="{element.maList[0]}" style="width:100%" />
    		</rich:column>	
                 <rich:column filterBy="#{element.maList[1]}" filterEvent="onkeyup" sortBy="#{element.maList[1]}">
    				<core:facet name="header">
    				       <core:verbatim></core:verbatim>
    				</core:facet>
    			        <html:outputText value="{element.maList[1]}" style="width:100%" />
    		</rich:column>
                             ...........
                             .........
    	</rich:dataTable>
    .............
    .....
    ..

    et quand j'essaye d'inclure un repeat, il a un peu du mal...enfin j'ai un peu du mal
    Mais je vais qd mm continuer à chercher comment je pourrais inclure ce tag.
    un tiens vaut pas mieux que zéro tu l'auras pas

  6. #6
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    malheureusement, je ne suis pas sur que les column soient fait pour etre répété horizontalement *et* verticalement. Tu peux peut être envisager d'utiliser les subtable de richfaces. Sinon, t'aura pas la choix, pour 10 colonnes, il faudra 10 h:column. Si tu utilise facelets, tu peux toujours te simplifier (un peu) la vie en remplacant çà par 10 includes d'un fichier contenant la colonne

  7. #7
    Membre régulier Avatar de maVariable
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    164
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 164
    Points : 105
    Points
    105
    Par défaut
    J'ai essayé pleins de manières différentes, mais y a pas trop moyen apparement... En réalité, repeat fait le travail des tags datatable+column, donc bon, difficile de lui en ajouter des nouveaux, et qui plus est alignés et non les uns au dessus des autres

    Oui, effectivement j'ai vu que facelets aurait pu m'apporter un peu d'aide, mais malheureusement je n'aurais pas trop le temps de le mettre en place... Bon bah tant pis, je vais itérer manuelement d'autant plus que j'ai un problème plus grave à résoudre, je vais le décrire dans un autre post.

    Merci qd même pour ton aide et tes indications
    un tiens vaut pas mieux que zéro tu l'auras pas

  8. #8
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    sans facelets, il te reste toujours le jsp:include pour t'alléger un peu le travail ^^

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Accès à une case d'un tableau grâce à headers
    Par Invité dans le forum Général JavaScript
    Réponses: 19
    Dernier message: 04/10/2006, 15h45
  2. Lien dans une case d'un tableau
    Par will89 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 27/04/2006, 10h50
  3. Accès à une base de donnée Sybase via ADODB
    Par pinpin44 dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 13/10/2005, 17h14
  4. [Debutant] URL utilisable depuis une case d'un tableau de BD
    Par Marc_3 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 03/04/2005, 19h06
  5. Accès à une case d'un DBGrid dans l'event OnKeyDown
    Par fba dans le forum Bases de données
    Réponses: 2
    Dernier message: 02/03/2004, 12h48

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