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 :

Fonctionnement méthode getNavigationHandler().handleNavigation()


Sujet :

JSF Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 214
    Par défaut Fonctionnement méthode getNavigationHandler().handleNavigation()
    Bonjour à tous.

    Je vous explique mon problème: j'ai 2 applications web distinctes construites toutes les 2 via JSF.

    On me demande aujourd'hui de pouvoir passer d'un écran de l'application A, vers un écran de l'application B en conservant bien entendu la locale de l'utilisateur.

    Ce qui existait pour l'instant c'est une page entry.jsp qui s'occupait de récupérer la langue passée dans l'url et se contentait d'afficher la page d'accueil de l'application. Mais maintenant le besoin a changé et je dois pouvoir directement via un lien hypertexte d'une page de mon application A passer sur une autre page de mon application B.

    L'approche que j'ai eu est la suivante: je fais passer en paramètre dans l'url la page que je désire atteindre ainsi qu'une éventuelle donnée que le bean de destination devra recevoir (id d'un record par exemple).

    Alors voici ce que j'ai fait:

    Ma page JSP qui est appelée directement via l'url (entry.jsp):

    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
    <%@ page language="java" contentType="text/html; charset=UTF-8"
    	pageEncoding="UTF-8"%>
    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
    <%@ taglib uri="http://myfaces.apache.org/tomahawk" prefix="t"%>
     
     
    <%@page import="javax.faces.context.FacesContext"%>
     
    <%@page import="package.beans.NavigationBean"%><f:view locale="#{navigationBean.initialSetup}">
    	<f:loadBundle var="msg" basename="package.bundle.messages" />
     
    	<html>
    		<body>
    			<%	
    				response.sendRedirect(response.encodeRedirectURL("welcome.faces"));
    			%>
    		</body>
    	</html>
    </f:view>
    Dans la méthode initialSetup de mon NavigationBean, je sette la locale ainsi que la page de destination (après vérification qu'il s'agisse bien d'une page "autorisée") et la donnée associée.

    Dans mon faces-config.xml, j'ai placé cette règle de navigation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    	<navigation-rule>
    		<display-name>*</display-name>
    		<from-view-id>*</from-view-id>
    		<navigation-case>
    			<from-outcome>B2420</from-outcome>
    			<to-view-id>/pages/monitoring/monitoringManager.jsp</to-view-id>
    		</navigation-case>
    <navigation-rule>
    Et donc, j'aimerai que lorsque la page entry.jsp soit appelée avec un paramètre page contenant la valeur "B2420" l'application B s'ouvre avec un la page JSP monitoringManager.

    Malheureusement, je ne sais pas trop comment via entry.jsp je pourrais faire exécuter cette navigation-rule...

    Pouvez-vous m'aider? Je suis certain que c'est une bêtise mais je ne parviens pas à trouver.

    Je vous en remercie d'avance!

  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
    il n'y a plus de scriptlets dans les jsp en JSF, pour la navigation tu peux soit le faire dans le faces-config, ou dans un managedBean.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 214
    Par défaut
    Le truc c'est que jusqu'à présent, la redirection dans le scriptlet vers welcome.faces fonctionne et si je la retire j'ai une page blanche.

    Et ma navigation-rule dans mon faces-config.xml a bien été écrite non?
    Mais mon problème c'est comment dire, à partir de ma page entry.jsp: "Ok il y a bien une page qui a été passée en argument donc essaye de trouver une navigation-rule la concernant".

    Inutile de préciser que je commence à peine JSF ^^

  4. #4
    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 k o D Voir le message
    Le truc c'est que jusqu'à présent, la redirection dans le scriptlet vers welcome.faces fonctionne et si je la retire j'ai une page blanche.

    Et ma navigation-rule dans mon faces-config.xml a bien été écrite non?
    Mais mon problème c'est comment dire, à partir de ma page entry.jsp: "Ok il y a bien une page qui a été passée en argument donc essaye de trouver une navigation-rule la concernant".

    Inutile de préciser que je commence à peine JSF ^^
    pour la page d'accueil tu peux le laisser, pour la navigation, il te faut une action:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <h:commandButton action="B2420" />
    Sinon n'oublie pas de consulter les cours et faq JSF

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 214
    Par défaut
    Ok, seulement là je vais créer un bouton sur ma page entry.jsp.

    Or je ne veux pas d'un bouton, je veux que la redirection ou le forward soit automatique. L'utilisateur n'a pas à appuyer sur une bouton de l'application B.

    L'utilisateur naviguant sur l'application A clique sur un lien dirigeant vers entry.jsp de l'application B. Dans ce lien il y a un paramètre "page" qui contient "B2420".
    En arrivant sur entry.jsp, la page "détecte" ce paramètre et redirige donc l'utilisateur sur la page B2420.

  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
    Tu peux utiliser le PhaseListener, récupérer le paramètre de la requete et faire la navigation par exemple.
    ou plus simplement utiliser un bean dans la page pour que le bean soit instancié par JSF et dans son constructeur tu récupère la valeur du paramètre de la requete et faire la navigation.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 214
    Par défaut
    Citation Envoyé par Sniper37 Voir le message
    Tu peux utiliser le PhaseListener, récupérer le paramètre de la requete et faire la navigation par exemple.
    ou plus simplement utiliser un bean dans la page pour que le bean soit instancié par JSF et dans son constructeur tu récupère la valeur du paramètre de la requete et faire la navigation.
    Désolé mais je galère quand même toujours.

  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
    ta première page JSF est bien affiché?
    Si oui tu peux y mettre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <h:inputHidden value="#{bean.param}" />
    et dans le constructeur de ce bean, tu peux utiliser la fonction handleNavigation.

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 214
    Par défaut
    Citation Envoyé par Sniper37 Voir le message
    ta première page JSF est bien affiché?
    Si oui tu peux y mettre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <h:inputHidden value="#{bean.param}" />
    et dans le constructeur de ce bean, tu peux utiliser la fonction handleNavigation.
    Le handleNavigation ne fonctionnera que dans le constructeur du managed Bean? Si c'est ça alors je commence à comprendre pourquoi je n'y arrivais pas.

    Pour le moment, dans ma page "entry.jsp" j'ai cette ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <f:view locale="#{navigationBean.initialSetup}">
    et plus bas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    response.sendRedirect(response.encodeRedirectURL("welcome.faces"));
    Et dans une méthode appelée par initialSetup, je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
                FacesContext context = FacesContext.getCurrentInstance();
                Application application = context.getApplication();
                MethodBinding binding = application.createMethodBinding("#{unicityManagerBean.initPage}", null);
                String destination = String.valueOf(binding.invoke(context, null));
                application.getNavigationHandler().handleNavigation(getFacesContext(), null, destination);
    Mais il ne me change pas de page, je serai bien redirigé vers welcome.jsp et si je retire la redirection, j'ai droit à une belle page blanche.

    Veux-tu le détail de la méthode "initialSetup"?

  10. #10
    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
    le local de la view n'est pas fait pour faire des setup..
    et pour le constructeur, c'est juste pour appeler la fonction à la création du bean.

    teste d'abord ta navigation avec un commandButton lorsque ça amrche bien, fait la même chose (outcome, source et destination) dans le bean.

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 214
    Par défaut
    Citation Envoyé par Sniper37 Voir le message
    le local de la view n'est pas fait pour faire des setup..
    et pour le constructeur, c'est juste pour appeler la fonction à la création du bean.

    teste d'abord ta navigation avec un commandButton lorsque ça amrche bien, fait la même chose (outcome, source et destination) dans le bean.
    Mais justement, ce que je ne sais pas faire, c'est appeler une méthode d'un de mes managed bean depuis ma page JSP.
    J'avais implémenté une solution avec un commandButton qui était automatiquement "cliqué" via Javascript qui fonctionnait très bien.

    Mais ce n'est clairement pas normal de devoir faire cela ^^

  12. #12
    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 k o D Voir le message
    Mais justement, ce que je ne sais pas faire, c'est appeler une méthode d'un de mes managed bean depuis ma page JSP.
    J'avais implémenté une solution avec un commandButton qui était automatiquement "cliqué" via Javascript qui fonctionnait très bien.

    Mais ce n'est clairement pas normal de devoir faire cela ^^


    on n'appelle pas une méthode directement depuis la jsp, une action d'un button fonctionne comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <h:commandButton value="Click me" action="#{bean.doAction}" />
    dans le bean

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public String doAction(){
    return "success";
    }
    Si dans ta page tu as :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <h:outputText value="#{managedBean.param}" />
    dans le cycle de vie JSF, le bean déclaré dans le faces-config 'managedBean' sera créée, donc, son constructeur sera automatiquement appelé, de plus, le getter de la valeur param sera appelé et pas qu'une seule fois.

    Si ce n'est pas clair, il faut lire la documentation de JSF pour comprendre un peu comment ça marche, tu gagnera beaucoup de temps.
    tu trouvera des cours intéressants Ici et la est

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 214
    Par défaut
    Contrairement aux apparences, j'ai bien compris ce principe, qui est la base de quasiment tous les frameworks web.

    Mais pour des raisons techniques, j'ai une page JSP qui devra jouer le rôle de controller... c'est moche, j'en suis conscient mais je ne peux malheureusement pas décider.

    Bref je pense donc que le seul moyen de faire ce que je veux c'est de simuler le click du bouton par Javascript.

  14. #14
    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 k o D Voir le message
    Contrairement aux apparences, j'ai bien compris ce principe, qui est la base de quasiment tous les frameworks web.
    justement JSF ne ressemble pas au autres frameworks dans son fonctionnement, si ta page fait toujours la même redirection, tu peux faire la redirection en jsp.
    Sinon si le redirection dépend de la valeur d'un paramètre, tu peux vérifier l'existence de ce paramètre dans un bean et faire la redirection dans le bean soit en utilisant sendRedirect ou d'utiliser la navigation JSF.

Discussions similaires

  1. Fonctionnement méthode Application.StartupPath
    Par sandre dans le forum Windows Forms
    Réponses: 2
    Dernier message: 26/11/2007, 08h29
  2. Fonctionnement de la méthode DragMode
    Par soso78 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 24/03/2007, 00h17
  3. [2.0][VB.NET]Comment fonctionne la méthode POST ?
    Par nine93 dans le forum ASP.NET
    Réponses: 4
    Dernier message: 24/11/2006, 10h15
  4. Fonctionnement de la méthode Compiler
    Par Cyberbob002 dans le forum 4D
    Réponses: 6
    Dernier message: 21/11/2006, 18h38
  5. fonctionnent de la méthode run dans les threads
    Par L4BiN dans le forum Concurrence et multi-thread
    Réponses: 8
    Dernier message: 25/07/2006, 11h06

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