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 :

Navigation entre 2 pages


Sujet :

JSF Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : Cameroun

    Informations forums :
    Inscription : Avril 2009
    Messages : 168
    Points : 122
    Points
    122
    Par défaut Navigation entre 2 pages
    Bonsoir,

    je travaille sur un projet web en java dans lequel j'utilise les technologies jsf 2.0 et primefaces 4.0 pour la présentation.
    Mon souci est le suivant: j'ai 2 pages dont la 1ere (page1.xhtml) contient les infos que je souhaiterais transmettre à la 2e page (pas encore conçue ).
    J'ai vu ce post qui est similaire à mon besoin (lien )mais je constate qu'il utilise un managed bean de type "session" ce qui signifie que ce bean restera en mémoire durant toute la durée de vie de la session et peut être on pourra être confronté aussi à un problème de "thread safe".

    voici les codes sources de ma page1.xhtml:
    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
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     
    <html xmlns="http://www.w3.org/1999/xhtml"
    	xmlns:f="http://java.sun.com/jsf/core"
    	xmlns:h="http://java.sun.com/jsf/html"
    	xmlns:p="http://primefaces.org/ui"
    	xmlns:ui="http://java.sun.com/jsf/facelets">
     
    		<h:head>
    			<f:facet name="last">
    				<h:outputStylesheet name="css/begin.css" />
    				<h:outputScript library="js" name="mapscript.js"/>
    			</f:facet>
    		</h:head><body>
    <h:panelGrid columns="1" cellpadding="5">
    	            			<p:commandButton  value="Consulter" styleClass="ui-buttonok"  style="margin-top:50px; margin-left:45px;" action="page2.xhtml" ajax="false" >
    	            			 <f:attribute name="attributeName1" value="test" />
    	            			</p:commandButton>
    	            		</h:panelGrid>
    </body>
    </html>
    Comment pourrais je faire pour transmettre la valeur "test" à la page2.xhtml de manière adéquate?

    Merci d'avance pour votre aide.

  2. #2
    Membre averti
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juillet 2013
    Messages
    269
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2013
    Messages : 269
    Points : 434
    Points
    434
    Par défaut
    Bonjour,
    le scope @ViewScoped correspond à ce que tu veux faire. Je ne l'ai personnellement pas utilisé donc pas d'exemple à te donner mais ils ne manquent pas sur le net.

  3. #3
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par VirgApps Voir le message
    Bonjour,
    le scope @ViewScoped correspond à ce que tu veux faire. Je ne l'ai personnellement pas utilisé donc pas d'exemple à te donner mais ils ne manquent pas sur le net.
    Ah ben non, ViewScoped ne peut pas fonctionner dans son cas, la page1 contient des informations qu'il veut faire passer à page2, ce sont 2 ViewScoped différents...

    Il y a 2 façons de faire à mon avis :

    1) Passer les paramètres de page1 au contrôleur de page2

    ça suppose qu'on passe par le contrôleur de page1 (on l'appellera ManagedBeanPage1) pour appeler le contrôleur de page2 (ManagedBeanPage2) pour l'affichage
    en utilisant une propriété de type ManagedBeanPage2 et l'annotation ManagedProperty pour stocker la référence de ManagedBeanPage2 dans ManagedBeanPage1.
    ça implique que le scope de ManagedBeanPage2 est supérieur ou égal au scope de ManagedBeanPage1

    2) Encapsuler le ManagedBean de page1 dans le ManagedBean de page2 par @ManagedProperty

    ça implique que le scope de ManagedBeanPage1 est supérieur ou égal au scope de ManagedBeanPage2

    Si l'analyse détermine que les critères de filtre (je suppose qu'il s'agit de ça) doivent persister d'un affichage à l'autre, je te conseille le SessionScoped pour y stocker ces informations et la solution 2
    Sinon, utilise plutôt la solution 1
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre averti
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juillet 2013
    Messages
    269
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2013
    Messages : 269
    Points : 434
    Points
    434
    Par défaut
    Citation Envoyé par OButterlin Voir le message
    Ah ben non, ViewScoped ne peut pas fonctionner dans son cas, la page1 contient des informations qu'il veut faire passer à page2, ce sont 2 ViewScoped différents...
    Si les variables sont communes aux 2 pages ça revient au même que de les transférer non ? Mais bon comme dit plus haut, je ne l'ai jamais utilisé, je te fais confiance

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : Cameroun

    Informations forums :
    Inscription : Avril 2009
    Messages : 168
    Points : 122
    Points
    122
    Par défaut
    Bonjour,

    tout d'abord merci pour vos réactions.

    Je suis du même avis qu'OButterlin dans le sens où la durée de vie d'un bean "ViewScoped" n'excède pas la page sur laquelle, elle est utilisée. Dès qu'on passe à une autre page ce bean est détruit et les infos qu'il contient sont perdues.

    Des 2 façons présentées par OButterlin, je partirai bien sur la 1ere façon.. J'ai quelques questions par rapport à cela:
    Comment définir le contrôleur associé à une page? (par exemple pour ManagedBeanPage1 )
    Est-il possible que ces 2 beans aient une portée "ViewScoped"? (en me référant à ce que tu as dit à la fin du 1er point:
    ça implique que le scope de ManagedBeanPage2 est supérieur ou égal au scope de ManagedBeanPage1
    ).

    Mon souci avec l'utilisation d'un bean "SessionScoped", est que cela ne sera pas "thread-safe" (si plusieurs users accèdent à ce bean concurremment, les valeurs stockées risquent ne pas refléter la réalité pour ces derniers)

    Je vous remercie d'avance pour vos réponses

  6. #6
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Ben non, le scope @SessionScoped est propre à chaque utilisateur, tu confonds avec @ApplicationScoped.

    Ceci dit, il faut faire attention avec @SessionScoped, on a tendance à l'utiliser trop et ça charge la mémoire pour rien.
    Généralement, dans le cas d'une liste particulièrement, j'ai 3 managedBean :
    - 1 pour le contrôleur de la liste -> @ViewScoped ou @RequestScoped
    - 1 pour les données de la liste en lazy (primefaces) -> @ViewScoped
    - 1 pour les critères de filtre/recherche -> @SessionScoped
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre averti
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juillet 2013
    Messages
    269
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2013
    Messages : 269
    Points : 434
    Points
    434
    Par défaut
    Citation Envoyé par lekonquerant Voir le message
    Je suis du même avis qu'OButterlin dans le sens où la durée de vie d'un bean "ViewScoped" n'excède pas la page sur laquelle, elle est utilisée. Dès qu'on passe à une autre page ce bean est détruit et les infos qu'il contient sont perdues.
    Mea culpa, j'ai écrit "ViewScoped" mais pensé "FlowScoped". Avec ce dernier, le bean existe durant toute la navigation des pages définies dans le flow, donc il n'est plus nécessaire de passer des paramètres de pages en pages... Et à l'inverse du "SessionScopd" il est détruit à la fin de la navigation.

  8. #8
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    OK, mais que à partir de JSF 2.2
    Mais dans ce cas, tu vises quoi, un bean unique contenant les données des 2 pages ou autre chose ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. pb de navigation entre les pages jsf !
    Par mido_bc dans le forum JSF
    Réponses: 4
    Dernier message: 05/02/2009, 16h49
  2. [HTML] Navigation entre des pages html
    Par chezdevelopping dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 16/01/2009, 11h30
  3. navigation entre les pages(WinForm)
    Par nashouille dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 26/08/2008, 13h52
  4. identification utilisateur et la navigation entre les pages
    Par montassar.nizar dans le forum JDeveloper
    Réponses: 2
    Dernier message: 08/05/2008, 12h26
  5. [Ergonomie] Optimiser la navigation entre mes pages web
    Par DBardel dans le forum Webdesign & Ergonomie
    Réponses: 8
    Dernier message: 17/01/2007, 11h53

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