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 :

Casting de value binding


Sujet :

JSF Java

Vue hybride

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 14
    Par défaut [Résolu]Récupérer l'identifiant lors d'un clic sur la ligne d'un tableau (NetBeans 6)
    Bonjour à tous,

    Je vous détaille mon souci.

    Environnement:
    Je travaille actuellement sur Netbeans 6 béta 2 avec un EJB ainsi que les composants graphiques woodstock (dont les tag JSP débutent par <webuijsf: )

    Le problème:
    J'aimerai que l'hyperlink d'une ligne d'un tableau ait un paramètre qui est l'id du champs.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     <f:param name="param" value="#{currentRow.value['epiid']}"/>
    Le soucis est que value doit être un String alors que dans mon tableau il s'agit d'un Short, cela ne fonctionnne donc pas.

    Le contournement suivant ne fonctionne pas non plus:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     <f:param name="param" value="#{currentRow.value['epiid'].toString}"/>
    Les données étant extraites d'une bdd par une Entity Classe, cela me gène de modifier le typage Short à la source.

    Y a-t-il un moyen pour faire un cast dans le value binding (de la manière dont je l'ai tenté avec mon toString) ou bien ma stratégie est à revoir ?

    Merci d'avance pour votre aide

  2. #2
    Expert confirmé
    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
    Par défaut
    Bonjour.
    Tout d'abord, le toString ne risque pas de marcher vu que l'EL ne peux accèder qu'au champs de JavaBeans (via les getters et les setters) ainsi qu'aux actions (String nom(void)).

    Sinon, tu peux contourner ce problème en passant par un DataModel et un commandLink.
    Jettes un coup d'oeil à cette discussion: http://www.developpez.net/forums/sho...d.php?t=435777

    Bonne chance.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 14
    Par défaut
    Merci pour ta réponse,
    malheureusement cette technique ne fonctionne pas avec ma table qui provient de la librairie com.sun.webui.jsf.component.Table, car getRowData() n'existe pas.

    La seule technique que j'ai trouvé est d'obtenir le numéro de row dans l'objet RowGroup de la table, le parser en int car ce numéro est un String (?!?) puis d'aller chercher dans mon tableau l'Id de mon élément:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    RowKey key = getTableRowGroup1().getRowKey();        
    m_sId = key.getRowId();        
    int nId = Integer.parseInt(m_sId);        
    String sEpiId = getEpi()[nId].getEpiid().toString();
    Je ne trouve pas cette technique très élégante.
    Les exemples de cette librairie graphique insèrent la balise <param/>, mais cette stratégie me pose le problème décrit dans mon post précédent.

    Sinon le tag #{monbean.prop1.prop2} est valide si prop2 est une propriété de l'objet retourné par prop1

  4. #4
    Expert confirmé
    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
    Par défaut
    Bonjour.
    Non, je parlais pas de la technique utilisant DataTable.getRowData, plutôt de l'autre technique (présenté par moi-même quelques posts plus bas) et qui devrait marcher sans problème avec n'importe qu'elle table (ça marche sur Sun RI, MyFaces, RichFaces, Tomahawk, etc.).
    C'est ici.

    Bonne chance.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 14
    Par défaut
    J'ai finalement trouvé une technique qui fonctionne bien finalement sous NetBeans 6.
    Les exemples proposés ne fonctionnent pas de façon simple car la <webuijsf:table> bind colonne par colonne à partir d'un dataprovider crée automatiquement.

    La solution est tellement évidente qu'elle pourrait servir à d'autres:

    Le JSP:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <webuijsf:table augmentTitle="false" binding="#{produit$ProduitList.table1}" id="table1">
    	<webuijsf:tableRowGroup binding="#{produit$ProduitList.tableRowGroup1}" id="tableRowGroup1" sourceData="#{produit$ProduitList.produits}" sourceVar="currentRow">
      	<webuijsf:tableColumn align="center" binding="#{produit$ProduitList.tableColumn1}" id="tableColumn1" width="45">
        	    <webuijsf:hyperlink actionExpression="#{produit$ProduitList.OnDetail}" binding="#{produit$ProduitList.link_detail}" id="link_detail" text="#{ProduitMsg.produitList_detail}"/>
       	</webuijsf:tableColumn>
        <webuijsf:tableColumn binding="#{produit$ProduitList.tableColumn4}" headerText="#{ProduitMsg.produitList_prproductid}" id="tableColumn4" sort="prproductid">
        	    <webuijsf:staticText binding="#{produit$ProduitList.txtId}" id="txtId" text="#{currentRow.value['prproductid']}"/>
       	</webuijsf:tableColumn>
    ...
    Java:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public String OnDetail()
    {                
    	String id = txtId.getText().toString();
     
    	return null;
    }
    Principe:
    On bind l'id recherché dans un staticText d'une colonne d'un tableau (si on ne veut pas qu'elle apparaisse on peut la masquer)
    On associe l'action OnDetail au lien.
    Lors du clic il ne reste qu'à récupérer les données de l'objet staticText qui contient l'id recherchée (ici txtId)

    Merci pour ton aide djo.mos

  6. #6
    Membre habitué
    Inscrit en
    Août 2004
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 57

    Informations forums :
    Inscription : Août 2004
    Messages : 8
    Par défaut
    voici une solution simple

    dans la page JSP
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <h:commandButton value="Press here" action="#{myBean.action}">
        <f:setPropertyActionListener target="#{myBean.propertyName1}" value="propertyValue1" />
    </h:commandButton>
    et dans le bean
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public void setPropertyName1(String propertyName1) {
            this.propertyName1 = propertyName1;
        }
    ca marche aussi avec des int.
    Voici un exemple complet qui utilise le composant Table de Woostock
    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
                                        <webuijsf:table augmentTitle="false" id="table1" title="Modèle de texte" width="600">
                                            <webuijsf:tableRowGroup id="tableRowGroup1" rows="20" sourceData="#{SessionBean1.listeModeleTexte}" sourceVar="currentRow">
                                                <webuijsf:tableColumn align="center" headerText="Texte" id="idTexte">
                                                    <webuijsf:image id="image1" url="/modeles/#{currentRow.value['lbCheminImage']}"/>
                                                </webuijsf:tableColumn>
                                                <webuijsf:tableColumn align="center" headerText="Libelle" id="idLibelle" width="175px">
                                                    <webuijsf:staticText id="staticText1" text="#{currentRow.value['lcLibelle']}"/>
                                                    <br/>
                                                    <webuijsf:staticText id="staticText2" text="#{currentRow.value['lbCheminImage']}"/>
                                                    <br/>
                                                    <br/>
     
                                                    <webuijsf:button    text="Choisir"
                                                                        immediate="true"
                                                                        actionExpression="#{SessionBean1.btChoisirModele_action}">
                                                        <f:setPropertyActionListener    target="#{SessionBean1.idModeleChoisi}"
                                                                                        value="#{currentRow.value['idModele']}" />
                                                    </webuijsf:button>
     
     
                                                </webuijsf:tableColumn>
                                            </webuijsf:tableRowGroup>
                                        </webuijsf:table>
    Plus d'info : http://balusc.blogspot.com/2006/06/c...on-in-jsf.html

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

Discussions similaires

  1. Comment faire un binding Sqlite Date value en C++ ?
    Par Hamdi Hedhili dans le forum SQLite
    Réponses: 2
    Dernier message: 23/12/2008, 14h35
  2. Probème avec le value binding
    Par Nicolas Carron dans le forum JSF
    Réponses: 1
    Dernier message: 28/11/2007, 17h37
  3. GridView Test sur la Bind value
    Par kangaxx dans le forum ASP.NET
    Réponses: 3
    Dernier message: 30/10/2007, 15h31
  4. Réponses: 1
    Dernier message: 07/03/2007, 21h06
  5. Problème Cast avec NULL values
    Par WwiloO dans le forum Langage SQL
    Réponses: 1
    Dernier message: 13/10/2005, 10h49

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