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 :

Comment gérer la navigation entre pages ?


Sujet :

JSF Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    100
    Inscrit en
    Juillet 2007
    Messages
    585
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : 100

    Informations forums :
    Inscription : Juillet 2007
    Messages : 585
    Par défaut Comment gérer la navigation entre pages ?
    Bonjour,

    J'aimerais savoir comment je peux "gérer" la navigation dans mon appli web.

    J'ai par exemple un megaMenu avec un lien qui affiche une page de gestion de sociétés (elle contient un tableau avec les sociétés en base et des actions de création / modification / suppression de société).

    Cas 1 :

    L'utilisateur arrive sur la page et clique sur le lien de création d'une société (je suis sur la page gestionSocietes.xhtml) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <p:link outcome="ajouterSociete" value="#{msg['AjouterUneSociete']}" />
    L'utilisateur se retrouve du coup sur la page ajouterSociete.xhtml qui contient un formulaire d'ajout avec un bouton "ajouter" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <p:commandButton value="#{msg['Ajouter']}" icon="ui-icon-check" style="margin:15px" action="#{ajouterSocieteForm.ajouterSociete}" />
    L'action du managedBean :
    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
     
    public void ajouterSociete() {
    		Societe societe = new Societe();
    		societe.setSeqTri(this.seqTri);
    		societe.setAbrege(this.abrege);
    		societe.setNom(this.nom);
    		societe.setDescription(this.description);
     
    		m_societeService.createSociete(societe);
     
    		this.seqTri = 10;
    		this.abrege = null;
    		this.nom = null;
    		this.description = null;
     
    		FacesContext.getCurrentInstance().addMessage(
    				null,
    				Messages.getMessage("LaSocieteAEteAjouteeAvecSucces",
    						FacesMessage.SEVERITY_INFO, null));
    	}
    J'aimerais, après l'ajout qu'il se retrouve à nouveau sur la page gestionSocietes.xhtml, comment puis-je faire cela ?

    Cas 2 :
    L'utilisateur sélectionne une société et clique sur le bouton modifier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <p:link outcome="modifierSociete" value="# #{msg['ModifierLaSociete']}" />
    Comment faire pour avoir la société qu'il a sélectionné dans ma page modifierSociete.xhtml ?
    Est-ce bien juste de vouloir faire comme cela ?

    Si la façon de vouloir gérer la navigation ou la saisie ou tout autre chose n'est pas bonne, je suis preneur de toute bonne pratique

    Merci d'avance pour votre aide

  2. #2
    Membre chevronné
    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
    Par défaut
    Bonjour,
    pour le cas 1, il faut, dans ta méthode, renvoyer une chaîne de caractère qui sera la page à afficher en fin de traitement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public String ajouterSociete() {
        ...
        return "gestionSocietes";
    }
    En cas d'erreur il faut envoyer null afin de rester sur la même page.

    Pour le cas 2, tu peux soit passer en paramètre l'id de la société pour ensuite le récupérer dans ton controlleur et le charger de nouveau.
    Dans le fichier xhtml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <p:link outcome="modifierSociete" value="#{msg['ModifierLaSociete']}">
        <f:param name="id" value="#{societe.id}"/>
    </p:link>
    Dans ton controlleur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Map<String,String> params = FacesContext.getExternalContext().getRequestParameterMap();
    String action = params.get("id");
    Ou plus simplement appeler une méthode avec l'objet à modifier en paramètre (je suppose que tu utilises un p:tab et admettons que ton itération est "societe")
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <p:commandButton action="#{modifierSocieteForm.modifierSociete(societe)}"/>
    Voilà, le code donné est de tête donc soumis à d'éventuelles erreurs de syntaxe

  3. #3
    Membre éclairé
    Profil pro
    100
    Inscrit en
    Juillet 2007
    Messages
    585
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : 100

    Informations forums :
    Inscription : Juillet 2007
    Messages : 585
    Par défaut
    Bonjour,

    Merci pour tes réponses et désolé pour le retard, j'étais en vacances
    Me revoici aux affaires.

    Pour le cas 1, je pensais utiliser le fichier faces-config.xml pour centraliser les redirection, en pensant que c'était mieux de faire comme ça. Est-ce bien juste ?
    Mais dans ce cas, j'ai un petit problème, comme j'ai fait, l'URL n'est pas changée ....
    Voici mon bout de code :

    Ma méthode d'ajout (qui retrourne "success" en cas de succès de l'ajout) :
    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
     
    public String ajouterSociete() {
    		try {
    			Societe societeExistante = m_societeService.getSociete(this.abrege);
    			if (societeExistante == null) {
    				Societe societe = new Societe();
    				societe.setSeqTri(this.seqTri);
    				societe.setAbrege(this.abrege);
    				societe.setNom(this.nom);
    				societe.setDescription(this.description);
     
    				m_societeService.createSociete(societe);
     
    				this.seqTri = 10;
    				this.abrege = null;
    				this.nom = null;
    				this.description = null;
     
    				FacesContext.getCurrentInstance().addMessage(
    						null,
    						Messages.getMessage("LaSocieteAEteAjouteeAvecSucces",
    								FacesMessage.SEVERITY_INFO, null));
    			} else {
    				FacesContext.getCurrentInstance().addMessage(
    						null,
    						Messages.getMessage("MsgSocieteDejaExistanteAvecAbrege",
    								FacesMessage.SEVERITY_WARN, new Object[]{this.abrege}));
    			}
    		} catch (Throwable e) {
    			System.out.println(e);
    			FacesContext.getCurrentInstance().addMessage(
    					null,
    					new FacesMessage(e.getMessage()));
    			return "failure";
    		}
     
    		return "success";
    	}
    Le facesConfig:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <navigation-rule>
    		<from-view-id>/secured/parametrage/gestion/ajouterSociete.xhtml</from-view-id>
    		<navigation-case>
    			<from-outcome>success</from-outcome>
    			<to-view-id>/secured/parametrage/gestion/gestionSocietes.xhtml?faces-redirect=true</to-view-id>
    		</navigation-case>
    		<navigation-case>
    			<from-outcome>failure</from-outcome>
    			<to-view-id>/secured/parametrage/gestion/gestionDepartements.xhtml?faces-redirect=true</to-view-id>
    		</navigation-case>
    	</navigation-rule>
    J'ai vu qu'il fallait ajouter "?faces-redirect=true" pour que le navigateur recharge la page, or avec le facesConfig, je ne vois pas comment faire. Mon code ne fonctionne pas.
    J'ai aussi essayé de l'ajouter à la chaine "success" retournée par ma méthode d'ajout .... toujours sans succès.

    Pour le cas 2, je regarde ce que tu me propose et te redis.

    Merci beaucoup pour ton aide en tout les cas

  4. #4
    Membre éclairé
    Profil pro
    100
    Inscrit en
    Juillet 2007
    Messages
    585
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : 100

    Informations forums :
    Inscription : Juillet 2007
    Messages : 585
    Par défaut
    Alors pour ce qui est du cas 1, en fait j'y suis arrivé en ajoutant <redirect /> dans le facesConfig.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <navigation-rule>
    		<from-view-id>/secured/parametrage/gestion/ajouterSociete.xhtml</from-view-id>
    		<navigation-case>
    			<from-outcome>success</from-outcome>
    			<to-view-id>/secured/parametrage/gestion/gestionSocietes.xhtml</to-view-id>
    			<redirect />		
                    </navigation-case>
    		<navigation-case>
    			<from-outcome>failure</from-outcome>
    			<to-view-id>/secured/parametrage/gestion/gestionDepartements.xhtml</to-view-id>
    			<redirect />
    		</navigation-case>
    	</navigation-rule>
    Par contre, pour le cas 2, je ne suis pas fan de passer l'id en paramètre de l'URL, je voulais donc utiliser la solution de passer en paramètre à la méthode que j'appelle, mais je ne vois pas comment faire.
    Tu proposes de faire comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <p:commandButton action="#{modifierSocieteForm.modifierSociete(societe)}"/>
    Mais le problème est que mon lien est le suivant (je demande la redirection sur la page modifierSociete) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <p:link value="# #{msg['Modifier']}" outcome="modifierSociete" >
    Du coup je n'appelle pas de méthode à laquelle je pourrais passer le paramètre.
    N'y a-t-il pas une autre solution ?

    Merci pour votre aide

Discussions similaires

  1. Navigation entre pages, mais URL figée
    Par maVariable dans le forum JSF
    Réponses: 4
    Dernier message: 21/07/2008, 13h23
  2. Navigation entre pages avec option de tri,etc
    Par elfenlieder dans le forum Ruby on Rails
    Réponses: 12
    Dernier message: 30/10/2007, 13h54
  3. [Visual Web] [VWP] Navigation entre pages WEB
    Par david71 dans le forum NetBeans
    Réponses: 1
    Dernier message: 27/09/2007, 00h28
  4. [XAML, XBAP, WPF] Navigation entre pages
    Par despeludo dans le forum Windows Presentation Foundation
    Réponses: 7
    Dernier message: 20/03/2007, 00h25
  5. Comment gérer la Navigation d'un site ?
    Par chtiboss dans le forum XML/XSL et SOAP
    Réponses: 4
    Dernier message: 22/03/2004, 13h17

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