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 :

passage de paramètre d'une page à une autre


Sujet :

JSF Java

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2009
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 44
    Points : 19
    Points
    19
    Par défaut passage de paramètre d'une page à une autre
    Bonjour

    je suis entrain de concevoir une interface d'historique article en utilisant une table jsf woodstock...

    cette table jsf représente certains champs de ma table de base de données.

    sur ma table jsf j'ai rajouté un champ contenant un lien hypertexte que j'ai baptisé "Détails". donc ce que je veux c'est que qu'on je clique sur ce lien la page de détails de l'article choisi s'affiche avec l'ensemble de ses informations....

    aprés une brève recherche, j'ai compris qu'il faut faire appel à faces-config pour déclarer la séquence de page à lancer... en voici un aperçu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    <navigation-rule>
    <from-view-id>/Page5.jsp</from-view-id>
    <navigation-case>
    <from-action>#{Page5.lien1_action}</from-action>
    <from-outcome>success</from-outcome>
    <to-view-id>/Page6.jsp</to-view-id>
    </navigation-case>
    </navigation-rule>
    sur la page5 j'ai la méthode qui transcrit l'événement de clique sur le lien hypertexte, la voici :

    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
     
     
     public String lien1_action() throws NamingException, NamingException, NamingException, SQLException, ClassNotFoundException {
            // TODO: Replace with your code
            try {
                RowKey rk = tableRowGroup1.getRowKey();
                if (rk != null) {
           int id =  Integer.parseInt(registerDataProvider.getValue("id", rk).toString());
           FacesContext context = FacesContext.getCurrentInstance();
                    Register register=null;
    		Connection connection = ConnectionManager.getInstance().getConnection();
    		Statement statement = connection.createStatement();
    		ResultSet resultSet=statement.executeQuery("SELECT * FROM register WHERE id=\""+id+"\"");
    		if(resultSet.next())
    		{
    			register=new Register(resultSet.getInt("id"),resultSet.getString("firstName"),resultSet.getString("lastName"),resultSet.getString("userName"),resultSet.getString("password"),resultSet.getString("profil"),resultSet.getString("email"),resultSet.getInt("contactNo"),resultSet.getString("address"),resultSet.getString("country"),resultSet.getString("state"));
                            register.setId(resultSet.getInt("id"));
                            register.setFirstName(resultSet.getString("firstName"));
                            register.setLastName(resultSet.getString("lastName"));
                            register.setUserName(resultSet.getString("userName"));
                            register.setPassword(resultSet.getString("password"));
                            register.setProfil(resultSet.getString("profil"));
                            register.setEmail(resultSet.getString("email"));
                            register.setContactNo(resultSet.getInt("contactNo"));
                            register.setAddress(resultSet.getString("address"));
                            register.setCountry(resultSet.getString("country"));
                            register.setState(resultSet.getString("state"));
    		}
    		resultSet.close();
    		statement.close();
                    }
            } catch (Exception ex) {
                log("ErrorDescription", ex);
                error(ex.getMessage());
            }
     
    		return "success";
     
        }
    et dans la page de détails c-a-d la page6, je remplis directement les champs dans la méthode prereder() voici le code :

    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 prerender() {
     
             Register register = null;
     FacesContext context = FacesContext.getCurrentInstance().getExternalContext().getResource(test.Register);
    System.out.println(register.getId());  // affichage de test
            id.setText(register.getId());
            firstName.setText(register.getFirstName());
        lastName.setText(register.getLastName());
        userName.setText(register.getUserName());
        password.setText(register.getPassword());
        profil.setText(register.getProfil());
        email.setText(register.getEmail());
        contactNo.setText(register.getContactNo());
        address.setText(register.getAddress());
        country.setText(register.getCountry());
        state.setText(register.getState());
     
        }
    le problème c'est qu'il y'a rien qui s'affiche sur la page de détails....


    je vous remércie à l'avance pour votre aide.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 191
    Points : 118
    Points
    118
    Par défaut
    Ton dataTable est lié à quel type d'objet?

    Voici un petit lien qui pourrait t'aider.

  3. #3
    Membre à l'essai
    Inscrit en
    Décembre 2009
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 44
    Points : 19
    Points
    19
    Par défaut
    Citation Envoyé par scorplayer Voir le message
    Ton dataTable est lié à quel type d'objet?

    Voici un petit lien qui pourrait t'aider.
    Merci pour la réponse

    En fait je parviens trés bien à récuperer les valeurs de mon datatable, mon souci est comment passer ces données à une autre page ???

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 191
    Points : 118
    Points
    118
    Par défaut
    Sorry

    Dans le constructeur de ton managed Bean (celui qui contient ta méthode lien1_action):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    FacesContext facesContext = FacesContext.getCurrentInstance();
            managedBeanDestinataire = (TypeManagedBeanDestinataire) facesContext.getApplication().getELResolver().getValue(facesContext.getELContext(), null, "nomManagedBeanDestinataire");
    Et pour transmettre ton objet, dans la méthode lien1_action, tu rajoutes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    managedBeanDestinataire.setObject(tonObjet)
    Tu n'as plus qu'à définir une méthode public 'setObject' dans ton managed bean destinataire.

    C'est ça que tu cherchais?

  5. #5
    Membre à l'essai
    Inscrit en
    Décembre 2009
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 44
    Points : 19
    Points
    19
    Par défaut
    Citation Envoyé par scorplayer Voir le message
    Sorry

    Dans le constructeur de ton managed Bean (celui qui contient ta méthode lien1_action):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    FacesContext facesContext = FacesContext.getCurrentInstance();
            managedBeanDestinataire = (TypeManagedBeanDestinataire) facesContext.getApplication().getELResolver().getValue(facesContext.getELContext(), null, "nomManagedBeanDestinataire");
    Et pour transmettre ton objet, dans la méthode lien1_action, tu rajoutes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    managedBeanDestinataire.setObject(tonObjet)
    Tu n'as plus qu'à définir une méthode public 'setObject' dans ton managed bean destinataire.

    C'est ça que tu cherchais?
    Bonjour cher ami

    je suis navré de te dire que j'ai beau essayé mais ça ne marche pas ..........

    si c'est possible d'eclaircir un peu plus j'en serai reconnaissant.....

    Dans d'autres exemples j'ai trouvé qu'ils utilisent juste le fichier faces-config, mais ça ne marche pas pour moi

  6. #6
    Membre à l'essai
    Inscrit en
    Décembre 2009
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 44
    Points : 19
    Points
    19
    Par défaut
    pour faire suite à mes investigations, j'ai meme fais en sorte que la méthode lien1_action() retourne un objet de la classe Register, sur la deuxième page je ne sais pas comment le récuperer !!!!

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 191
    Points : 118
    Points
    118
    Par défaut
    Ok, on va recommencer depuis le début.

    Tout d'abord, sache que la balise <navigation-rule> dans faces-config définie une règle de navigation, autrement dit, elle permet de changer de page. Le changement de page est déclenché grâce au nom défini dans la balise <from-outcome>. <to-view-id> détermine la page à afficher. Les 2 autres balises (<from-view-id> et <from-action>) sont falcultatives, elles ajoutent des restrictions à l'accès de ta page. Donc plus simplement on peut avoir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <navigation-rule>
        <navigation-case>
            <from-outcome>success</from-outcome>
            <to-view-id>/Page6.jsp</to-view-id>
        </navigation-case>
    </navigation-rule>
    J'imagine que ton lien 'Détails' ressemble à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <h:commandLink value="Détails" action"#{nomDeTaPage5.lien1_action}"/>
    nomDeTaPage5 étant le nom représentant Page5.java (nom défini dans faces-config).

    La méthode lien1_action() lancée à travers l'attribut 'action' de ton composant commandLink doit retourner "success" si tu veux afficher la Page6 (comme spécifié dans faces-config).

    Maintenant que nous avons éclairci comment procéder pour changer de page, voyons pour transmettre les données à ton Page6.java.
    Tu arrives à récupérer ton objet dans ta méthode lien1_action(), très bien. Il te suffit donc de rajouter à la fin de ta méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     public String lien1_action() throws NamingException, NamingException, NamingException, SQLException, ClassNotFoundException {
        .
        .
        .
        .     
        FacesContext facesContext = FacesContext.getCurrentInstance();
        managedBeanDestinataire = (Page6) facesContext.getApplication().getELResolver().getValue(facesContext.getELContext(), null, "nomDeTaPage6");
        managedBeanDestinataire.prerender(register);
        return "success";
     }
    Si tu veux le code exacte, montre moi le contenu de toutes tes balises <managed-bean> de ton faces-config.

    Pour finir, dans Page6.java, il te faut redéfinir prerender:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public void prerender(Register register) {
        id.setText(register.getId());
        firstName.setText(register.getFirstName());
        lastName.setText(register.getLastName());
        userName.setText(register.getUserName());
        password.setText(register.getPassword());
        profil.setText(register.getProfil());
        email.setText(register.getEmail());
        contactNo.setText(register.getContactNo());
        address.setText(register.getAddress());
        country.setText(register.getCountry());
        state.setText(register.getState());
     
    }
    Voilà

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 191
    Points : 118
    Points
    118
    Par défaut
    Un conseil : la FAQ de développez est très utile!

    Vocabulaire : un managed bean est un objet java gérant les intéractions/données d'une page. Par exemple, Page6.java est le managed bean de Page6.jsp.

  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
    Points : 5 059
    Points
    5 059
    Par défaut
    Il n' y' a pas ce principe de passage de paramètres de pages pages dnas JSF, tout fonctionne avec le value binding et les EL expression, si ton bean est dans un scope accessible dans la page, il suffit d'utiliser ce bean.
    Pour mettre des valeurs d'un bean dans une autre classe java, il vaut mieux l'utiliser en tant que paramètres (property du managed bean) et laisser JSF gérer l'instanciation du bean.
    Sinon avec EL resolver tu peux récupérer le bean et lui passer les valeurs.

    et tout celà est expliqué dans la
    d'autres discussions parlent du même sujet.

  10. #10
    Membre à l'essai
    Inscrit en
    Décembre 2009
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 44
    Points : 19
    Points
    19
    Par défaut
    Citation Envoyé par scorplayer Voir le message
    Ok, on va recommencer depuis le début.

    Tout d'abord, sache que la balise <navigation-rule> dans faces-config définie une règle de navigation, autrement dit, elle permet de changer de page. Le changement de page est déclenché grâce au nom défini dans la balise <from-outcome>. <to-view-id> détermine la page à afficher. Les 2 autres balises (<from-view-id> et <from-action>) sont falcultatives, elles ajoutent des restrictions à l'accès de ta page. Donc plus simplement on peut avoir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <navigation-rule>
        <navigation-case>
            <from-outcome>success</from-outcome>
            <to-view-id>/Page6.jsp</to-view-id>
        </navigation-case>
    </navigation-rule>
    J'imagine que ton lien 'Détails' ressemble à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <h:commandLink value="Détails" action"#{nomDeTaPage5.lien1_action}"/>
    nomDeTaPage5 étant le nom représentant Page5.java (nom défini dans faces-config).

    La méthode lien1_action() lancée à travers l'attribut 'action' de ton composant commandLink doit retourner "success" si tu veux afficher la Page6 (comme spécifié dans faces-config).

    Maintenant que nous avons éclairci comment procéder pour changer de page, voyons pour transmettre les données à ton Page6.java.
    Tu arrives à récupérer ton objet dans ta méthode lien1_action(), très bien. Il te suffit donc de rajouter à la fin de ta méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     public String lien1_action() throws NamingException, NamingException, NamingException, SQLException, ClassNotFoundException {
        .
        .
        .
        .     
        FacesContext facesContext = FacesContext.getCurrentInstance();
        managedBeanDestinataire = (Page6) facesContext.getApplication().getELResolver().getValue(facesContext.getELContext(), null, "nomDeTaPage6");
        managedBeanDestinataire.prerender(register);
        return "success";
     }
    Si tu veux le code exacte, montre moi le contenu de toutes tes balises <managed-bean> de ton faces-config.

    Pour finir, dans Page6.java, il te faut redéfinir prerender:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public void prerender(Register register) {
        id.setText(register.getId());
        firstName.setText(register.getFirstName());
        lastName.setText(register.getLastName());
        userName.setText(register.getUserName());
        password.setText(register.getPassword());
        profil.setText(register.getProfil());
        email.setText(register.getEmail());
        contactNo.setText(register.getContactNo());
        address.setText(register.getAddress());
        country.setText(register.getCountry());
        state.setText(register.getState());
     
    }
    Voilà
    je te remércis cher ami, ça marche en fin ......... Ouuuuuuf

    Merci beaucoup

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

Discussions similaires

  1. [Débutant] pour affecter une page à une Page Master
    Par zerkos dans le forum VB.NET
    Réponses: 0
    Dernier message: 06/07/2012, 10h45
  2. Passage de paramètre d'une page à une autre
    Par SonnyFab dans le forum ASP.NET
    Réponses: 4
    Dernier message: 17/06/2010, 17h10
  3. Réponses: 9
    Dernier message: 15/04/2009, 15h09
  4. Réponses: 3
    Dernier message: 17/08/2007, 12h45
  5. Réponses: 6
    Dernier message: 29/09/2006, 10h18

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