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 :

value change listner ne se declanche pas


Sujet :

JSF Java

  1. #1
    Membre éclairé Avatar de lastrecrue
    Développeur Java
    Inscrit en
    Février 2006
    Messages
    360
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2006
    Messages : 360
    Par défaut value change listner ne se declanche pas
    Bonjour

    j'ai un champs de saisi h:inputtext avec valuechangelistener qui se déclenche correctement sauf si j'efface le champs de saisie.

    avez vous une idée sur comment détourner ce problème?

    j'utilise rich face comme jeux de composant.

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    les champs vides échappent à toute la phase de validation jsf, phase durant laquelle, je suppose, le valuechangelistener est déclenché.

  3. #3
    Membre éclairé Avatar de lastrecrue
    Développeur Java
    Inscrit en
    Février 2006
    Messages
    360
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2006
    Messages : 360
    Par défaut
    ca veux dire que je ne peut pas intercepter le fait que ca le champs soit vide ??? ou bien je pourrais faire un converter ??? si non je veux bien avoir d'autre idées.

  4. #4
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Par défaut
    Cela se passe durant la phase de validation, et je me demande si la théorie de tchize_ ne serait pas la bonne explication au problème.

    A confirmer en passant par un mode de débug je pense...
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  5. #5
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Par défaut
    Tu peux nous montrer ton code ? Quelle version de JSF utilises tu ?

    Je viens de réaliser le test, avec ce code JSF :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <h:inputText value="#{bean.foo}" valueChangeListener="#{bean.hasChanged}"/>
    Ma méthode hasChanged(ValueChangeEvent evt) ne faisant que logguer son appel + les valeurs de l'input. Voici les logs :

    Premier appel, avec remplissage du champ avec une valeur :

    BEFORE PHASE [RESTORE_VIEW 1]
    AFTER PHASE [RESTORE_VIEW 1]
    BEFORE PHASE [APPLY_REQUEST_VALUES 2]
    AFTER PHASE [APPLY_REQUEST_VALUES 2]
    BEFORE PHASE [PROCESS_VALIDATIONS 3]
    HAS BEEN CHANGED !!
    null ==> coucou

    AFTER PHASE [PROCESS_VALIDATIONS 3]
    BEFORE PHASE [UPDATE_MODEL_VALUES 4]
    AFTER PHASE [UPDATE_MODEL_VALUES 4]
    BEFORE PHASE [INVOKE_APPLICATION 5]
    AFTER PHASE [INVOKE_APPLICATION 5]
    BEFORE PHASE [RENDER_RESPONSE 6]
    Puis suppression du contenu du champ, puis soumission du formulaire :

    BEFORE PHASE [RESTORE_VIEW 1]
    AFTER PHASE [RESTORE_VIEW 1]
    BEFORE PHASE [APPLY_REQUEST_VALUES 2]
    AFTER PHASE [APPLY_REQUEST_VALUES 2]
    BEFORE PHASE [PROCESS_VALIDATIONS 3]
    HAS BEEN CHANGED !!
    coucou ==>

    AFTER PHASE [PROCESS_VALIDATIONS 3]
    BEFORE PHASE [UPDATE_MODEL_VALUES 4]
    AFTER PHASE [UPDATE_MODEL_VALUES 4]
    BEFORE PHASE [INVOKE_APPLICATION 5]
    AFTER PHASE [INVOKE_APPLICATION 5]
    BEFORE PHASE [RENDER_RESPONSE 6]
    AFTER PHASE [RENDER_RESPONSE 6]
    Je suis sur JSF 1.2_07-b03-FCS.
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par romaintaz Voir le message
    Cela se passe durant la phase de validation, et je me demande si la théorie de tchize_ ne serait pas la bonne explication au problème.
    Comme dit (ou sous entendu) je ne sais pas exactement comment est géré le value changed. Mais ce qui est certains, c'est que dans les specs:

    un champ vide n'est pas validé, seul le critère required=true est checké dessus
    un champ "non soumis" (retiré par javascript ou par bidouille de l'utilisateur) échappe à toute validation, c'est comme si le composant n'existait pas (pas de décodage, pas de conversion, pas de validation, par d'appel au setter du bean). Il est d'ailleurs fortement recommandé de ne pas utiliser la validation JSF pour les validations de sécurité, juste comme aide à l'utilisateur. (il faut toujours faire une validation plus profonde à l'intérieur du bean avant de stocker en DB quand c'est nécessaire)

  7. #7
    Membre éclairé Avatar de lastrecrue
    Développeur Java
    Inscrit en
    Février 2006
    Messages
    360
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2006
    Messages : 360
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <h:inputText value="#{bean.foo}" valueChangeListener="#{bean.hasChanged}" requiered="true"/>
    <h:commandButton action="#{bean.fermer}" value="fermer" immediat="true" />
    si on mais dans foo une valeur au chargement du bean , on supprime cette valeur et on clic sur valider le hasChanger ne se déclenche pas sauf si on change sans tout effacer.

  8. #8
    Membre éclairé Avatar de lastrecrue
    Développeur Java
    Inscrit en
    Février 2006
    Messages
    360
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2006
    Messages : 360
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Comme dit (ou sous entendu) je ne sais pas exactement comment est géré le value changed. Mais ce qui est certains, c'est que dans les specs:

    un champ vide n'est pas validé, seul le critère required=true est checké dessus
    un champ "non soumis" (retiré par javascript ou par bidouille de l'utilisateur) échappe à toute validation, c'est comme si le composant n'existait pas (pas de décodage, pas de conversion, pas de validation, par d'appel au setter du bean). Il est d'ailleurs fortement recommandé de ne pas utiliser la validation JSF pour les validations de sécurité, juste comme aide à l'utilisateur. (il faut toujours faire une validation plus profonde à l'intérieur du bean avant de stocker en DB quand c'est nécessaire)
    est ce possible d'avoir la référence de ton affirmation, le paragraphe de la spe de jsf qui dis ca ...
    merci d'avance.

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    dans la spec:
    "The render-independent property required is a shorthand for the function of a “required” validator.". Donc mettre isRequired à true, c'est ajouter un validator.

    et dans la java doc, uinput.validate(), on trouve
    Perform the following algorithm to validate the local value of this UIInput.

    * Retrieve the submitted value with getSubmittedValue(). If this returns null, exit without further processing. (This indicates that no value was submitted for this component.)
    * If the javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL context parameter value is true (ignoring case), and getSubmittedValue() returns a zero-length String call setSubmittedValue(java.lang.Object), passing null as the argument and continue processing using null as the current submitted value.# Convert the submitted value into a "local value" of the appropriate data type by calling getConvertedValue(javax.faces.context.FacesContext, java.lang.Object).
    * Validate the property by calling validateValue(javax.faces.context.FacesContext, java.lang.Object).
    * If the valid property of this component is still true, retrieve the previous value of the component (with getValue()), store the new local value using setValue(), and reset the submitted value to null. If the local value is different from the previous value of this component, fire a ValueChangeEvent to be broadcast to all interested listeners.
    Autrement dit, la validation n'a pas lieu avec un null, même pas donc le required qui est testé dans validateValue. Dons les champs à string vide sont bien validé (cf etoile 2). Par contre les champs non soumis ne le sont pas.

    Tout l'utilité de la chose est la gestion des composants qui ne sont pas nécessairement visible, mais qui ne passent pas par le mecanisme rendered=... (exemple le tabbedpane de tomahawk)

  10. #10
    Membre éclairé Avatar de lastrecrue
    Développeur Java
    Inscrit en
    Février 2006
    Messages
    360
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2006
    Messages : 360
    Par défaut
    Merci, je comprend mieux maintenant en gros mon problème ne peut pas être résolu en passant par validator ou converter.

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    si il peux l'etre car votre champ est soumis à vide (string de longueur null, cf ci-dessus), pas supprimé de la soumission

    De toute façon, je ne faisiat que rappeler le fait qu'on ne peux pas se fier aveuglément à la validation jsf pour els truc critiques, car elle est bidouillable par le client.

  12. #12
    Membre éclairé Avatar de lastrecrue
    Développeur Java
    Inscrit en
    Février 2006
    Messages
    360
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2006
    Messages : 360
    Par défaut
    en fait j'arrive a activé la validation n mais le value changelistener ne se déclenche que si la validation c'est bien passé a ce que j'ai compris ?

  13. #13
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Par défaut
    oui, la validation (ou plus exactement l'échec de celle-ci) est bloquante, donc pas de listener activée si la validation échoue.
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

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

Discussions similaires

  1. Go_item suite à un value change
    Par complicated dans le forum Forms
    Réponses: 3
    Dernier message: 08/02/2013, 15h11
  2. [Visual Web] DropDown et value change
    Par flotho dans le forum NetBeans
    Réponses: 0
    Dernier message: 27/09/2009, 00h57
  3. Datagrid cell value changed
    Par epiouf dans le forum Général Dotnet
    Réponses: 0
    Dernier message: 17/08/2009, 14h04
  4. Réponses: 1
    Dernier message: 12/06/2009, 10h30
  5. [C#] DevAge SourceGrid Value Changed
    Par JuJu° dans le forum Windows Forms
    Réponses: 1
    Dernier message: 01/05/2006, 22h06

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