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 :

Opérations sur les EL (Setters)


Sujet :

JSF Java

  1. #1
    Membre averti
    Inscrit en
    Août 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 30
    Par défaut Opérations sur les EL (Setters)
    Bonjour,
    JSF permet de manipuler les EL dans plusieurs cas d'utilisations: expressions arithmétiques, opérateurs booléens, conditionnels ternaires et j'en passe. Mais ce que j'ai remarqué, c'est que ces opérations ne sont appliquées que lors de l'appel des getters, je me demande si on peut appliquer des opérations sur les EL avant l'injection dans les beans -lors de l'appel des Setters-.

    En fait, je cherche par exemple à injecter l'état inverse d'un checkBox (Sans modifier le setter standard ):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <h:selectOneCheckbox value="#{!MyBean.Field}"/>
    Si je place ce checkbox dans un formulaire, il prendra l'état inverse de l'attribut field lors du chargement de la vue:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    monCheckBox.checked= !MyBean.Field
    coché si field=false
    décoché si field=true
    Mais en validant le formulaire, on ne peut pas injecter l'inverse de l'état checked du checkBox:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    field=false si coché
    field=true si décoché
    Je c pas si j'ai bien expliqué le problème. Mais ce que je cherche finalement, c'est d'appliquer des opérations sur les EL lors de l'injection dans les beans.

    Merci d'avance pour tout aide

  2. #2
    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
    tu peux utiliser les converters pour ça ..

  3. #3
    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
    Salut,
    En fait, pour les composant read-only, tu peux faire ce que tu veux avec l'EL, exemple:

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    <h:outputText value="{bean1.age * 2 + 25}" />

    Etc.

    Le problème se pose avec les composants qui peuvent modifer leur value (comme tous les inputs).

    Pourquoi c'est pas possible avec ce genre de composants là ? Par exemple pourquoi pas :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    <h:selectOneCheckbox value="#{!MyBean.Field}"/>

    ?
    Pour les mêmes raisons que ce bout de code Java est incoorect:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    boolean value;
    !value=true;

  4. #4
    Membre averti
    Inscrit en
    Août 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 30
    Par défaut
    Citation Envoyé par djo.mos Voir le message
    Pourquoi c'est pas possible avec ce genre de composants là ? Par exemple pourquoi pas :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    <h:selectOneCheckbox value="#{!MyBean.Field}"/>
    En essayant de valider un formulaire qui comporte ce genre de composants, ça génère l'erreur suivante (merci rich:messages) qui empêche la validation du formulaire (commandButton/action):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    /vue.jsp '#{!MyBean.Field}' Illegal Syntax for Set Operation
    /vue.jsp '#{MyBean.Field? true : false}' Illegal Syntax for Set Operation //même avec les ternaires
    Citation Envoyé par Sniper37
    tu peux utiliser les converters pour ça ..
    Les converters ne permet de faire la convertion que dans un sens (valeur saisie -> converter -> bean) moi je veux faire aussi une "conversion" dans le sens (bean -> converter -> valeur saisie).

  5. #5
    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
    Citation Envoyé par rhani-sama Voir le message
    En essayant de valider un formulaire qui comporte ce genre de composants, ça génère l'erreur suivante (merci rich:messages) qui empêche la validation du formulaire (commandButton/action):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    /vue.jsp '#{!MyBean.Field}' Illegal Syntax for Set Operation
    /vue.jsp '#{MyBean.Field? true : false}' Illegal Syntax for Set Operation //même avec les ternaires
    Euh ... j'essayais pas de te dire que <h:selectOneCheckbox value="#{!MyBean.Field}"/> allait marcher, au contraire même ... parceque c'est grossièrement équivalent au bout de code java que j'ai montré.

  6. #6
    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
    les converters fonctionnent pour les deux sens;

  7. #7
    Membre averti
    Inscrit en
    Août 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 30
    Par défaut
    Citation Envoyé par Sniper37 Voir le message
    les converters fonctionnent pour les deux sens;
    J'ai testé l'utilisation des converters malgré que c'est une solution qui est s'éloigne du vif du sujet (EL). En fait, grâce aux méthodes getAsString et getAsObject la conversion peut se faire dans les deux sens comme l'a déjà signaler Sniper. Mais en essayant de coder ce converter, j'ai du mal à implémenter la méthode getAsString, car je vois pas comment convertir un Boolean en un string(Boolean.toString).

    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
    public class CheckBox implements Converter{
        public CheckBox() {
        }
     
        public String getAsString(FacesContext facesContext, UIComponent uIComponent, Object obj) {
            Boolean B = (Boolean)obj;
            if(B) return "";
            return obj.toString();
        }
     
        public Object getAsObject(FacesContext facesContext, UIComponent uIComponent, String str) {
            if(str.isEmpty()) return Boolean.TRUE;
            return Boolean.FALSE;
        }
    }
    même la méthode getAsObject n'a pas bien fonctionné avec le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <h:selectBooleanCheckbox value="#{MyBean.Field}">
            <f:converter converterId="CheckBox"/>
    </h:selectBooleanCheckbox>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <converter>
            <converter-id>CheckBox</converter-id>
            <converter-class>converters.CheckBox</converter-class>
    </converter>

  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
    pourquoi ça marche pas bien..

    on est d'accord ce n'est pas pour convertir le Boolean, car ça existe déjà..

    et son code contient:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    try
            {
                return ((Boolean)value).toString();
            }
            catch (Exception e)
            {
            	throw new ConverterException(e);
            }

Discussions similaires

  1. Opération sur les dossier...
    Par bdaboah dans le forum Langage
    Réponses: 5
    Dernier message: 01/11/2005, 17h28
  2. [OpenGL/C++] Opérations sur les Textures
    Par Bob.Killer dans le forum OpenGL
    Réponses: 6
    Dernier message: 10/08/2005, 10h27
  3. Opérations sur les matrices...
    Par aokiseiichiro dans le forum C
    Réponses: 32
    Dernier message: 28/07/2005, 17h10
  4. opérations sur les bits d'un byte
    Par petitours dans le forum C++Builder
    Réponses: 4
    Dernier message: 10/02/2004, 20h42
  5. opérations sur les dates
    Par coucoucmoi dans le forum Débuter
    Réponses: 2
    Dernier message: 12/08/2003, 11h45

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