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 :

intercepter l'évènement de changement d'un formulaire


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 : 43

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2006
    Messages : 360
    Par défaut intercepter l'évènement de changement d'un formulaire
    salut

    le titre décrit ce que je cherche, je travaille sur jsf et richfaces, et j'ai lue ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    En cas de modification, un évènement est déclenché automatiquement par 
    le Framework et l'utilisateur a la possibilité de le gérer afin d'interagir directement 
    avec l'arbre des contrôles.
    La dernière étape consiste à mettre à jour le modèle de présentation et à 
    générer la réponse HTML en fonction de la hiérarchie des composants. Cette 
    opération s'appelle le Rendu ou "Rendering".


    dans un article.

    alors la question est comment intercepter si il y un changement dans un champs du formulaire au niveau a4J.

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <h:inputText value=......>
      <a4j:support event="onchange" reRender="sectionARafficher" actionListener="#{monBean.maMethodListener}"/>
    </h:inputText>
    par exemple

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

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2006
    Messages : 360
    Par défaut
    merci pour ta réponse mais est'il possible d'avoir un onchange sur tout le form ???
    surtout que je risque de me retrouver avec des formulaires énorme ...

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    le but du on change c'est de réagir pendant que l'utilisateur tappe dans les champ, il n'est donc en général utilisé que pour des composants particulier (exemple faire une liste qui dépend de l'entrée tappée dans le formulaire, vérifier dans un formulaire d'enregistrement automatiquement que le numéro de tél est correct, que le login n'est pas déjà pris, etc).

    Ne pas confondre avec le fait de vouloir savoir, au moment du submit, tout ce qui a été changé par l'utilisateur, ça ce n'est pas le boulot de a4j, mais c'est à ton action de comparer les nouvelles et ancienne valeur. Par définition, si tu soumet tout le formulaire, pour JSF, tout a changé, tout subit un cycle de conversion et d'appel aux setters, même si au final la valeur settée est la même que la précédente.

  5. #5
    Membre éprouvé Avatar de juridakus
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Maroc

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

    Informations forums :
    Inscription : Avril 2008
    Messages : 82
    Par défaut Même problème
    Salut,
    J'ai rencontré la même difficulté dans mon app, effectivement s'il y a une possibilité d'écouter tout changement sur le formulaire ce serait génial. Finalement, j'ai travaillé avec des a4j:support sur les champs clés de mon formulaire. Mais si tu as des formulaires énormes, c'est pas gagné. je serai aussi preneur pour toute solution pouvant globaliser.

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

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2006
    Messages : 360
    Par défaut
    c'est exactement pour quoi je me suis dis que ca serais parfait si dans jsf ils'ont prévue le cas ou il y'a pas de changement ou bien au cas ou je veut fermer la page alors qu'il y a des changement non sauvgarder, donc mon but au moment ou j'appuis sur un bouton avant de soumettre la requête a jsf pouvoir remonter des alertes pour les deux cas ... et donc au pire comment récupere les valeur avec les quelles le formulaire a était initialisé pour prendre la décision de passer a la couche métier ou plutôt remonter l'alerte ..

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    au moment de l'action qui précède le premier affichage du formulaire, tu dois stocker en session des copies de tes beans metiers. Lors de l'action qui suit l'envoi du formulaire, tu compare les beans sauvegardés aux nouveau beans.

  8. #8
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Par défaut
    Lors de l'action qui suit l'envoi du formulaire, tu compare les beans sauvegardés aux nouveau beans.
    Je trouve ca très lourd tchize_, j'avais déjà été confronté à ce pb lors de mon dernier projet, j'y ai palié en javascript comme suit, tous mes formulaires avaient un champ hidden initialisé à 0, et tous mes composants faisaient un appel javascript d'une fonction "onchange", la fonction js appelée passait simplement mon hidden à 1. et donc la soumission d'un formulaire n'était faite qu'en fonction de ce champ hidden. Je trouvais ça plus léger comme gestion.

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

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2006
    Messages : 360
    Par défaut
    dans le document que j'ai cité plus haut
    En cas de modification, un évènement est déclenché automatiquement par
    le Framework et l'utilisateur a la possibilité de le gérer afin d'interagir directement
    avec l'arbre des contrôles.
    puisque j'ai l'impression que un listener global n'existe pas ... au lieux que je garde mes donnée dans un bean session est ce possible de récupérer l'arbre des données avec le quel compare jsf lui même ???

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

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2006
    Messages : 360
    Par défaut
    Citation Envoyé par DevServlet Voir le message
    Je trouve ca très lourd tchize_, j'avais déjà été confronté à ce pb lors de mon dernier projet, j'y ai palié en javascript comme suit, tous mes formulaires avaient un champ hidden initialisé à 0, et tous mes composants faisaient un appel javascript d'une fonction "onchange", la fonction js appelée passait simplement mon hidden à 1. et donc la soumission d'un formulaire n'était faite qu'en fonction de ce champ hidden. Je trouvais ça plus léger comme gestion.
    peut tu me donnée un petite exemple pour faire ca ??? j'arrive pas a suivre ton explication

  11. #11
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Par défaut
    j'ai pas le projet ici avec moi, mais en fait dans chaque formulaire tu mettrais un champ
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type ="hidden" value="0"
    et dans chacun de tes composants du formulaire tu ferais un appel du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <ton_composant  onchange="ma_fonction_js(this)"
    et dans ton js tu mettrais :et dans ton submit tu ne fais un appel serveur que si cette valeur a changé. Tu vois le truc?

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    JSF ça fonctionne comme çà


    Beans de Donnée -> Formulaire -> utilisateur -> soumission -> transfert vers Beans de données -> appel de l'action

    autrement dit, dans l'action, tu peux scanner tout ce que tu veux, t'aura les nouvelle valeur puisque JSF a déjà fait le transfert vers les beans. La solution javascript c'est joli, mais c'est fort sensible aux bidouille du client, si le but est de faire de l'audit sur un formulaire, celui qui voudra se cacher aura vite compris qu'il suffit de remettre ces champs à 0 avant le submit ou de désactiver JS pendant que tu remplis le formulaire .

    Je rajoute aussi que

    T'as aussi la possibiltié de mettre des Listener sur les evènements globaux de JSF, dans le faces-config et faire du travail à cet endroit là si ça te chante. Mais il n'y a pas à ma connaissance de méthode magique dans JSF qui va te retourner la liste des composant qui ont subit une différence entre la valeur soumise et la valeur d'origine. Sans compter que des mises à jour partielles de beans peuvent avoir lieu dans certaines conditions, sans pour autant aller jusqu'à l'action (erreurs dans les converters par exemple).

  13. #13
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cacher aura vite compris qu'il suffit de remettre ces champs à 0 avant le submit ou de désactiver JS pendant que tu remplis le formulaire
    C'est un champ en hidden, envoyé avec la methode post, le client n'a pas connaissance, et 2emement richFaces repose completement sur du full js, tu desactives le js et rien ne marche. Je suis hostile aux solutions de comparaison de bean pour la simple raison qu'on perd , en mémoire, occupation de la bande passante, et j'en passe inutilement. Imagines qu'un utilisateur ne fait rien sur un formulaire et valide, (avec eventuellement plusieurs champs ou composants sur le formulaire) l'appli passera toutes les phase JSF et fera une comparaison completement inutiles coté serveur.

  14. #14
    Membre éprouvé Avatar de juridakus
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Maroc

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

    Informations forums :
    Inscription : Avril 2008
    Messages : 82
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    T'as aussi la possibiltié de mettre des Listener sur les evènements globaux de JSF, dans le faces-config et faire du travail à cet endroit là si ça te chante.
    tchize_ peux tu détailler un peu cette soluce
    Je crains aussi que n'importe quel évènement puisse être catché pourtant la saisie du champ n'a pas été faite. Par exemple tu as un radio button qui va juste activer ou desactiver un champ du form.

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    il s'agit d'évènement globaux liés uniquement aux 5 Phases JSF, Phase ayant lieu uniquement coté serveur. Mais je suppose que tu peux t'en servir pour scanner l'arbre avant le ApplyRequestValue et après le Render afain de faire des comparaisons.

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

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2006
    Messages : 360
    Par défaut
    finalement je crois que je vais opter pour la vérification coté serveur ... au moins ca seras plus sur que on va pas modifier le texte par le même et passé pour une modification je préfère que ca charge mon serveur d'application plutôt que de faire appel a ma BD...

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

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2006
    Messages : 360
    Par défaut
    je ré-ouvre ce post car j'ai trouver l'évènement "ValueChangeEvent" et je voudrais savoir comment je peut l'utiliser ??
    est ce que c'est possible de l'activer sur tout le formulaire?

  18. #18
    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 : 48
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Par défaut
    Non, ValueChangeEvent ne peut être lié à un formulaire complet. En gros, cet attribut te permet de disposer d'une méthode qui dispose de l'ancienne valeur et de la nouvelle valeur d'un unique champ.
    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. [JTextField & évènement](débutant)changement du texte
    Par Asnidren dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 28/11/2006, 13h12
  2. [HTML] Changement apparence bouton formulaire type submit
    Par dfournier dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 02/11/2006, 22h20
  3. Réponses: 4
    Dernier message: 22/09/2006, 14h29
  4. [VB6] événement sur changement cmb
    Par Mak2S dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 01/05/2006, 10h27
  5. [fenetre à onglets] Intercepter les événements des panels
    Par Regis.C dans le forum Agents de placement/Fenêtres
    Réponses: 6
    Dernier message: 14/04/2005, 10h50

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