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 :

Faire passer un objet java à un composant JSF depuis une page JSP


Sujet :

JSF Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 79
    Points : 58
    Points
    58
    Par défaut Faire passer un objet java à un composant JSF depuis une page JSP
    Salut

    Je souhaiterai faire passer un objet java créer à partir d'une page JSP vers un composant JSF

    cette page jsp a reçu comme paramètre un id qui à partir de cet id va créer un objet java qui sera ensuite appelé par des composants jsf.
    par exmeple voici le code de la page 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
    21
    
    <%@page contentType="text/html"%>
    <%@page pageEncoding="UTF-8"%>
    <%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
    <%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%>
    
       <%@ page import="org.myproject.bean.*" %>
       <% 
        String id = request.getParameter("id"); 
        MyObject obj = new MyObject(id);
       %>
    
     <f:view>
           
           <h:form id="formulaire">
                 <h:outputText value="le nom de l'objet est : " />
                 <h:outputText value="????????????"/>
           </h:form>
    
     </f:view>
    l'url de la page est par exemple : mapage.jsf?id="456"


    vous l'aurez compris que dois-je mettre à la place de ???????????? pour afficher la valeur d'un attribut de l'objet concerné, sachant que l'objet possède bien un attribut name et un getter et setter


    merci de votre aide

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 79
    Points : 58
    Points
    58
    Par défaut
    en fait pour vous donner une meilleure explication de ce que je veux faire, je voudrai pouvoir ouvrir plusieurs popup differentes à partir d'une page initiale, qui affichent un contenu similaire entre chaque popup mais les valeurs doivent être differentes, par exemple imaginez qu'on voudrais comparer pour un site de jeux video plusieurs fiches de jeux.
    le contenu de la popup sera des composants jsf avec par exemple une image, du texte etc, donc j'ai essayer dans un premier temps de créer un Bean tout simple avec plusieurs attributs par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    public classe Bean {
     private Game jeuxvideo;
     private String resume;
     private String urlImage;
    ...getter et setter 
    ...etc
     
    }
    puis de faire appel à ces attributs dans la popup jsf sans oublier d'initialiser l'instance du bean au lancement de la popup avec par exemple sur la page initiale :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <t:datatable var="game"
    ...>
    
        <h:commandButton value="ouvrir popup" onclick= "window.open('popup.jsf?id=#{game.id}','popup#{rowIndexVar}', 'height=600,width=800,scrollbars=yes,resizable=yes');">
    
                     <f:setPropertyActionListener value="#{game}" target="#{bean.jeuxvideo}" />
    
     </h:commandButton>
    ...
    </t:datatable>
    voila, et le problème avec cette méthode c'est que lorsque j'ouvre 2 popups pour deux fiches de jeux differents j'ai la même popup et c'est sans surprise, alors comment dire à jsf que c'est une autre instance de bean ???

    est-ce au momment de la déclaration du bean ?? en jouant avec le managed-bean-scope ??

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    
    <managed-bean>
        <managed-bean-name>bean</managed-bean-name>
            <managed-bean-class>org.myproject.Bean</managed-bean-class>
        <managed-bean-scope>session</managed-bean-scope>
      </managed-bean>

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2003
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2003
    Messages : 64
    Points : 63
    Points
    63
    Par défaut
    Je ne suis pas sûr de ma réponse mais est-ce que tu as juste essayé de mettre dans ta déclaration de bean, request à la place de session?
    Qwerty roule n'amasse pas mousse

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 79
    Points : 58
    Points
    58
    Par défaut
    c'est bon j'ai résolu mon problème :
    dans la page de popup qui reçoit en parametre un id
    j'utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <f:view beforePhase="#{bean.updateComponents}" >
    la méthode updateComponents(PhaseEvent event) va récuperer mon parametre id puis va créer une instance d'objet à partir de cet id et enfin elle va affecter chaque composant de la popup en appelant le FaceContext.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 197
    Points : 42
    Points
    42
    Par défaut
    medhi, j'ai justement le meme probléme que toi, je ne vois pas comment tu fais pour récupérer l'id que t'as passé en paramétre dans la fonction beforePhase

    En gros, j'aimerais faire par exemple index.jsp?indice=1 et crée le bean directement des l'ouverture de la page grace au parametre indice,biensur en se connectant à la base qui remplit les champs du bean
    Avec <f:view beforePhase="....."> ca pourait marcher,j'appelle une fonction java,mais comment récupér mon parametre?

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 79
    Points : 58
    Points
    58
    Par défaut
    Salut stephane92400

    la methode que t'appele avec beforePhase doit avoir pour signature :

    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
     public void tamethode (PhaseEvent event){
         // on récupère le context
         FacesContext context = event.getFacesContext();
    
         //on récupère ton parametre
         HttpServletRequest request = (HttpServletRequest) context.getExternalContext().getRequest();
         String indice = request.getParameter("indice");
    
        // initialiser ton bean avec ce parametre en créant une value expression
       ValueExpression ve = context.getApplication().getExpressionFactory().createValueExpression(context.getELContext(),"#{tonbean}", java.lang.Object.class);
       Object tonbean = new Object(indice);  //par exemple
       
       //affectation à la value expression
       ve.setValue(context.getELContext(),tonbean);
    
        
     }
    voila

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 197
    Points : 42
    Points
    42
    Par défaut
    merci bien medhi,ca répond exactement à ma question

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 197
    Points : 42
    Points
    42
    Par défaut
    je viens d'essayer mais il ne reconnait pas la méthode ValueExpression ve = context.getApplication().getExpressionFactory().createValueExpressio


    Il faut avoir qu'elle version de java??Sinon pas d'autres moyen de procéder??

    J'ai regarder la faq et tombé sur ca Comment journaliser les phases de l'application JSF ?
    Appeller une fonction beforePhase des l'ouverture de la page,le prbl que j'ai c'est qu'il appelle sans arret la méthode des que je change de page,et ca je ne veux pas,donc.....?

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

Discussions similaires

  1. passer un string dans l'URL à partir d'une page jsp
    Par marry dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 26/04/2009, 15h04
  2. Réponses: 1
    Dernier message: 20/03/2009, 18h17
  3. Réponses: 7
    Dernier message: 28/08/2008, 22h52
  4. inserer un composant jsf dans une page PHP
    Par !NyThaX&& dans le forum JSF
    Réponses: 8
    Dernier message: 22/11/2007, 07h28
  5. recuperation d'un objet situé dans la session dans une page JSP
    Par chriscoolletoubibe dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 20/05/2007, 16h55

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