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 :

Action effectuée à partir d'une action ?


Sujet :

JSF Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 34
    Par défaut Action effectuée à partir d'une action ?
    Bonjour j'aimerais faire ceci:

    une fois un formulaire rempli et valider donc mon entité créer (h:commandbutton) , j'aimerais que seulement dans ce cas la je puisse effectuer une action présente dans une autre classe (initialiser des données pour la page suivante).

    Cela revient à deux actions la première valider puis si la validation est bonne, effectuer une seconde action.

    Je ne sais pas trop comment m'en sortir.

    Merci pour votre aide.

  2. #2
    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 : 44
    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 Razielback Voir le message
    Cela revient à deux actions la première valider puis si la validation est bonne, effectuer une seconde action.
    Pour le faire moi j'utilise un actionListener méthode void(ActionEvent evt)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     <h:commandButton actionListener="#{bean.method1}" action="#{bean.method2}" />
    l'actionListener s'exécute toujours en premier. tu peux maintenant déclarer un booleén que tu testeras dans le code de l'action.

  3. #3
    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
    pour valider, tu peux utiliser un validator, l'action ne sera de toute façon pas exécutée si la validation ne passe pas.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 34
    Par défaut
    Merci pour les réponses, j'utilise déjà un validator pour mes champs de formulaire, et je ne pense pas que l'on puisse en mettre dans un command button.Mon action dans mon command button permet de persister mon objet dans ma datable et une fois cette objet persister (donc il est valide) je veux charger des données dans une autre classe avec une méthode de cette autre classe (deuxième action que je veux réaliser).
    Je ne sais pas trop comment marche les actionlistener et tu sur que l'actionlistener s'exécute toujours avant l'action?

  5. #5
    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
    Citation Envoyé par Razielback Voir le message
    Merci pour les réponses, j'utilise déjà un validator pour mes champs de formulaire,
    Si les champs ne sont pas valide, l'action ne sera jamais appelé, donc pas besoin d'une nouvelle action.
    NB: tu peux aussi ajouter un validator à un commandButton, regarde la , il doit y'avoir un exemple

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 34
    Par défaut
    En utilisant <core:validator>?

    Mais bon avec les classes validators j'ai remarqué qu'il avait du mal à géré l'injection d'un entitymanager.
    Et puis je vois mal avec mon validator ce que je récupérerais (object value c'est quoi? que je récupère de commandbutton) même si de l'autre coté cela m'évite de gérer pleins d'exceptions que je gère en ce moment.
    C'est pour cela que l'autre idée me plait celle je déclare un boolean que je change avec mon actionlistener et ensuite je lance mon action 2 avec un boolean, (un peu lourd comme style)

  7. #7
    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
    quelle type de validation tu fais??
    avec le booléen ça va marcher, mais, tu ne va pas profiter du système de validation JSF, ça va être un peu lourd à maintenir.
    si tu fais déjà une validation JSF, pourquoi ajouter une deuxième action?? montre ton code..

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 34
    Par défaut
    ma methode qui valide mon formulaire pour l'instant elle est void dans ma classe createadressageip.

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
     
    public void createNewAdressageIP() {
     
    		try {
    			/* Test si il y a des doublons dans les id*/
    			doublonSearch();
     
    			/*
    			 * Assigne l'organisme, lève une erreur qui sera traitée dans le
    			 * premier catch
    			 */
    			String orgRequest = "select org from Organisme org where idorg = '"
    					+ Utils.extractStringafter(idOrg, ":") + "'";
    			List<Organisme> org = (List<Organisme>) entityManager.createQuery(
    					orgRequest).getResultList();
    			adressageIP.setOrganisme(org.get(0));
     
    			/*
    			 * Assigne le centre, lève une erreur qui sera traitée dans le
    			 * premier catch
    			 */
     
    			String lanAdressRequest = "select cent from Centre cent where adresselan = '"
    					+ Utils.extractString(lanAddress, ":") + "'";
    			List<Centre> centre = (List<Centre>) entityManager.createQuery(
    					lanAdressRequest).getResultList();
    			adressageIP.setCentre(centre.get(0));
     
    			/* Si la case Utilisateur est coché */
    			if (util == true)  {
     
    				/*
    				 * Assigne l'utilisateur, lève une erreur qui serait traité dans
    				 * le premier catch
    				 */
    				adressageIP.setMateriel("0");
    				String idUtilRequest = "select util from Utilisateur util where idutil = '"
    						+ Utils.extractStringafter(idUtil, ":") + "'";
    				List<Utilisateur> util = (List<Utilisateur>) entityManager
    						.createQuery(idUtilRequest).getResultList();
     
    				/* Cherche le premier id disponible dans la table */
    				int cpt = 1;
    				while (entityManager.find(Appartienta.class, cpt) != null) {
    					cpt++;
    				}
    				/* Crée l'objet appartientA dans la table des liens */
    				Appartienta appartientA = new Appartienta();
    				appartientA.setIdappartient(cpt);
    				appartientA.setAdressageip(adressageIP);
    				appartientA.setUtilisateur(util.get(0));
     
    				Set<Appartienta> setAppartientA = new HashSet<Appartienta>(0);
    				setAppartientA.add(appartientA);
    				adressageIP.setAppartientas(setAppartientA);
     
    				/* Important persist l'adresse avant le appartient */
    				entityManager.persist(adressageIP);
    				entityManager.persist(appartientA);
     
    				/* Ajout du log dans l'historique de modification */
    				createLog("Création Adresseip", adressageIP.getAdresseip());
    				createLog("Création AppartientA", adressageIP.getAdresseip());
     
    			} else {
    				/* Si Case non cochée alors pas d'utilisateur */
    				adressageIP.setMateriel("-1");
    				adressageIP.setAppartientas(new HashSet<Appartienta>(0));
    				entityManager.persist(adressageIP);
     
    				/* Ajout du log dans l'historique de modification */
    				createLog("Création Adresseip", adressageIP.getAdresseip());
     
    			}
    			/* Création de l'adresse IP */
     
    		} catch (java.lang.IndexOutOfBoundsException j) {
    			/*
    			 * Dans le cas où la liste d'util,organisme et/ou centre est
    			 * vide, il y a un champ vide ou aucune valeur correspond donc on
    			 * traite l'erreur.
    			 */
    			System.out.println(Utils.extractStringafter(idUtil, ":"));
    			FacesMessages.instance().addToControl("Error_Constraint",
    					"Echec lors de la création, valeur inéxistante. ");
     
     
    		}
     
    		catch (BatchUpdateException e) {
    			/* Dans le cas où doublon search lève une erreur */
    			FacesMessages.instance().addToControl("Error_Constraint",
    					"Adresse IP déjà existante");
     
     
    		}
    	}

    la méthode que je veux lancer qui est dans la classe ViewCentre que je veux lancer suite à la première méthode si elle a réussi.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    	public String viewCentre(Centre c, int retour){
    		this.centre=c;
    		this.redirectpage= retour;
    		String request = "select ad from Adressageip ad where adresselan = "+c.getIdlan()+" order by ad.adresseip asc";
    		adressageIPList = (List<Adressageip>) entityManager.createQuery(request).getResultList();
    		return "ok";
    	}
    Pour utiliser le validator j'implemente 'interface validator et je rempli la méthode validate
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {...}

  9. #9
    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 l'utiliser, tu peux l'associer à un inputHidden déclaré required,
    mais, il n' y pas que de la validation dans ton code, c'est plus de l'instanciation d'autre objets..

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 34
    Par défaut
    Je vais peut être affiner encore plus mes validators mais mon problème restera le même.
    Le actionlistener est comme un action? je veux dire il suit le même cycle? Mon objet sera persister avant le lancement de ma deuxième action. Merci en tous cas pour le coup de main.

  11. #11
    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 : 44
    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 Razielback Voir le message
    Le actionlistener est comme un action? je veux dire il suit le même cycle?
    Oui c'est une requête ajax. Donc elle écoute tout évènement sur le bouton et s'exécutera avant l'action en suivant le même cycle.

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 34
    Par défaut
    Dernière petite question, pour une méthode qui se trouve dans un actionlistener il faut faire un truc spécial, vous n'avez pas juste un exemple? parce que j'ai cru comprendre qu'elle prennait une param (Actionevent e) il sert à quoi?

  13. #13
    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
    Citation Envoyé par juridakus Voir le message
    Oui c'est une requête ajax. Donc elle écoute tout évènement sur le bouton et s'exécutera avant l'action en suivant le même cycle.
    Non l'actionListener n'est pas une requete ajax, c'est une méthode appelée pendant la phase Invoke Application, elle est appelé avant l'action.
    Elle peut être utilisée dans toute requete ajax ou pas.

  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 : 44
    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
    D'accord Sniper37, utilisée comme je l'ai cité plus il s'agit effectivement d'une méthode qui sera appelée suite à l'évènement (clic) sur le bouton. D'où le paramètre ActionEvent.

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 34
    Par défaut
    Est ce que je dois implementer l'interface javax.faces.event donc remplir la méthode actionperformed ou alors utiliser java.awt.event?

  16. #16
    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
    Citation Envoyé par Razielback Voir le message
    Est ce que je dois implementer l'interface javax.faces.event donc remplir la méthode actionperformed ou alors utiliser java.awt.event?
    regarde un peu les tutoriels et la faq avant de te lancer dans le developpement tu gagnera du temps. la méthode actionListener prend un paramètre de type javax.faces.event.ActionEvent, awt n'a rien à faire dans JSF..

  17. #17
    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 : 44
    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 Razielback Voir le message
    Est ce que je dois implementer l'interface javax.faces.event donc remplir la méthode actionperformed ou alors utiliser java.awt.event?
    voici une illustration:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <h:commandButton value="Login" action="#{loginBean.loginAction}" actionListener="#{loginBean.checkUser}" />
     
    boolean checkOK = false;
     
    public void checkUser(javax.faces.event.ActionEvent evt) 
    {check dans la bd des infos de connexion; si Ok checkOK = true;}
     
    public String loginAction() 
    {si checKOK return "GoToWelcomePage" }
    La seule diférence avec ton cas je fais appel à deux méthode de la même classe. Detoute façon tu trouves le moyen de tester dans l'action que ta méthode actionListener a effectuée l'opération voulue.

  18. #18
    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
    Juste une petite remarque, ce que tu veux faire dans l'actionListener tu peux bien le faire dans l'action.

  19. #19
    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 : 44
    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
    Je crois que le besoin de ce genre d'astuce est que vu que nous ne pouvons pas paramétrer les actions, on peut exploiter le résultat fourni avant par l'actionListener.

  20. #20
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 34
    Par défaut
    Merci juridakus ça marche très bien, et oui sniper si je pouvais le faire dans mon action je l'aurais fait mais je ne peux pas dans ce cas. En tous cas merci beaucoup à vous de votre coup de main.

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

Discussions similaires

  1. appeler une action a partir d'une page jsp
    Par air75 dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 17/07/2008, 16h03
  2. Retour à la page précédente à partir d'une action
    Par thomzon dans le forum Struts 1
    Réponses: 1
    Dernier message: 17/04/2007, 12h10
  3. recuperer ServletConfig à partir d'une action
    Par david06600 dans le forum Struts 1
    Réponses: 2
    Dernier message: 16/08/2006, 15h06
  4. Ouvrir un html a partir d'une action
    Par MeDioN dans le forum Interfaces Graphiques en Java
    Réponses: 4
    Dernier message: 16/02/2006, 17h16
  5. [C#] [.net compact] Ouvrir un fichier a partir d'une action
    Par AdriM dans le forum Windows Mobile
    Réponses: 5
    Dernier message: 29/11/2005, 11h51

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