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 :

binding d'un attribut de type List à un composant JSF


Sujet :

JSF Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Février 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 3
    Par défaut binding d'un attribut de type List à un composant JSF
    salut à tous!!!
    Je m'exerce à créer des composants JSF. Je suis confronté au problème de binding de l'attribut d'un composant à un bean.
    En effet, j'ai un composant possédant un attribut value de type java.util.List. le fichier TLD est déclaré comme suit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <attribute>
                <name>value</name>
                <required>false</required>
                <type>java.util.List</type>
            </attribute>
    mon composant étend la classe UIComponentBase
    la classe du tag de mon composant étend la classe UIComponentELTag. J'y ai défini un attribut value de type ValueExpression. la méthode setProperties ressemble à ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public void setProperties(UIComponent component){
            super.setProperties(component);        
     
            if (this.value != null){
                component.setValueExpression("value", value);
            }
        }
    j'ai défini la méthode getValue suivante dans la classe du composant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public List getValue(){
            ValueExpression ve = this.getValueExpression("value");
            if (ve != null){
        List value = (List)ve.getValue(this.getFacesContext().getELContext());
                return value;
            }else{
                       return null;
                    }
        }
    Quelqu'un peut-il me dire ce qui ne va pas avec mon code, puisqu'il ne marche pas. Ou alors m'indiquer un site où je pourrais trouver un bon tutoriel indiquant comment faire ce genre de chose?

    Merci d'avance

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 79
    Par défaut
    salut

    essaye d'ajouter la balise <deferred-value> comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    <attribute>
                <name>value</name>
                <required>false</required>
                <deferred-value>
                     <type>java.util.List</type>
                </deferred-value>
     </attribute>

    tu utilise tomcat ou glassfish ou autre ??

    j'ai un composant qui utilise java.util.List dans ses attributs et j'ai remaquer que le comportement n'etait pas le même selon que ce soit tomcat ou glassfish.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 79
    Par défaut
    Citation Envoyé par soupkodjou
    Salut Mediii
    Merci pour ton aide; en fait j'avais déjà essayé d'utiliser <deffered-value>, mais sans succès. J'utilise Tomcat 6.0
    salut, le comportement qui diffère entre tomcat et glassfish est que tomcat analyse l'objet attendu dans l'attribut value comme étant une String, voici le code pour récuperer ta liste selon que ce soit tomcat ou bien glassfish
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    List mylist = new ArrayList();
    Object value = component.getAttributes().get("value");
    if (value != null){
                // avec tomcat
    if(value.getClass().toString().contains("java.lang.String")){
                    ValueExpression ve = context.getApplication().getExpressionFactory().createValueExpression(context.getELContext(),(String) value, java.lang.Object.class);
                    mylist = (List) ve.getValue(context.getELContext());
                }
                else{
    // avec glassfish aucun souci
                    mylist = (List) value;
                }
            }
    avec dans la taglib mettre cette fois java.lang.Object

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    <attribute>
                <name>value</name>
                <deferred-value>
                    <type>java.lang.Object</type>
                </deferred-value>
                <required>false</required>
                <rtexprvalue>false</rtexprvalue>
            </attribute>

Discussions similaires

  1. Réponses: 2
    Dernier message: 05/03/2008, 16h12
  2. Réponses: 6
    Dernier message: 23/05/2007, 14h36
  3. Réponses: 3
    Dernier message: 02/05/2006, 15h12
  4. Réponses: 7
    Dernier message: 14/02/2005, 10h40
  5. Pb avec le formulaire en type List
    Par LoulouFifi dans le forum Struts 1
    Réponses: 5
    Dernier message: 04/02/2004, 11h34

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