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 :

Portée dans un backing bean


Sujet :

JSF Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Février 2011
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 26
    Par défaut Portée dans un backing bean
    Bonjour à tous

    je développe actuellement une application avec JSF 2.2 et j'ai un peu de mal avec les portées de mes beans.
    J'évite au maximum d'utiliser les @SessionScoped inutilement et opte donc pour des @ViewScoped (le ResquestScoped ne me permet pas de gérer des appels en Ajax et je ne comprends rien au ConversationScoped)

    j'ai un bean de création d'entités (associé à un formulaire de création) qui fonctionne parfaitement. Il prends comme attribut un objet de type entite.

    j'ai également un autre bean qui permet de lister les entités existantes (relié à une vue présentant donc les entités)

    Mon problème est que je souhaiterais un lien sur chaque entité pour pouvoir la modifier, et qui donc chargerait la vue de création mais avec les champs pré remplis

    Or comme mon bean de création/modification est en @ViewScoped il se construit au chargement de la vue et je n'arrive donc pas à lui passer l'entité en question et donc à pré remplir mes champs.

    En gros je voudrais rester en viewScoped mais en pré initialisant mon bean avant le chargement de la vue

    Voila j’espère que j'ai été clair et que quelqu'un pourra m'aider

    Merci d'avance

  2. #2
    Membre émérite
    Avatar de Cafeinoman
    Homme Profil pro
    Couteau suisse d'une PME
    Inscrit en
    Octobre 2012
    Messages
    628
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Couteau suisse d'une PME

    Informations forums :
    Inscription : Octobre 2012
    Messages : 628
    Par défaut
    Ce serai plus simple si tu mettais le code...
    Tu as bien deux constructeur, un sans paramètre qui initialise les champs vide, et un autre avec ton entité qui pour chaque champ fait un this.champ = entite.getLeChamp() ?

  3. #3
    Membre averti
    Inscrit en
    Février 2011
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 26
    Par défaut
    Merci pour ta réponse
    j'ai hésité à mettre le code mais entre mes deux beans et mes deux vues je me suis dis que ça servait pas à grand chose d'alourdir ma question.

    Je vais essayer ta solution, mais actuellement je n'ai qu'un constructeur sans parametre car je n'appelle pas mes constructeurs, ( c'est JSF qui gère la construction de mes beans)

    Pour que ta solution fonctionne je devrait donc faire un new monBean(monEntite) ?

  4. #4
    Membre averti
    Inscrit en
    Février 2011
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 26
    Par défaut
    Si ca peut aider voici mon code :

    bean de création/modification :

    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
    @Named
    @ViewScoped
    public class CreationRecettesManager implements Serializable {
     
        //Attributs
        private Recette recette;
        private List<IngredientSimple> listeIngredients = new LinkedList<IngredientSimple>();
        private String listeIngredientsTextarea;
        private String listeEtapesTextarea;
        private IngredientSimple ingredientSelectionne;
        private GererIngredients gererIngredients;
        private UIComponent table;
        private int tabIndex;
     
        @Inject
        private RecetteDAO recetteDao;
        @Inject
        private AffichageRecettesManager affichageRecetteManager;
        @Inject
        private ConnexionManager connexionManager;
     
     
     
        //Constructeurs
        public CreationRecettesManager() {       
        }
     
     
        @PostConstruct
        public void init() {
           tabIndex = 0;
                this.recette = new Recette();
                this.recette.setNumRecette(recetteDao.getNumRecette(connexionManager.getMembre().getIdentifiant()));
                recette.setProprietaire(connexionManager.getMembre());
                this.listeIngredients.add(new IngredientSimple());
        }
    et mon bean d'affichage de la liste :

    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
    @Named
    @SessionScoped
    public class AffichageRecettesManager implements Serializable {
     
        //Attributs
        private List<Recette> listeRecettes;
        private Recette recetteSelectionne;
        @Inject
        private RecetteDAO recetteDao;
        @Inject
        CreationRecettesManager creationRecetteManager;
        private UIComponent table;
     
        //Constructeurs
        public AffichageRecettesManager() {
        }
     
        //Methodes
        @PostConstruct
        public void myInitMethod() {
             listeRecettes = new ArrayList<Recette>();
            this.recetteSelectionne = new Recette();
            this.listeRecettes = recetteDao.findAll();
        }
        /**
         * methode retournant la taille de la liste des recettes
         * @return
         */
        public int getListRecettesSize() {
            return this.listeRecettes.size();
        }
     
        public String modifierRecette(){
            creationRecetteManager.setRecette(recetteSelectionne);
            return "lienCreationRecette";
        }

  5. #5
    Membre émérite
    Avatar de Cafeinoman
    Homme Profil pro
    Couteau suisse d'une PME
    Inscrit en
    Octobre 2012
    Messages
    628
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Couteau suisse d'une PME

    Informations forums :
    Inscription : Octobre 2012
    Messages : 628
    Par défaut
    Je pense t'avoir dit une bêtise en fait... essai plutôt de regarder du côté de prerenderview à la place de postconstruct pour ton bean d'affichage.

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Si je comprends bien, tu as une liste et tu te débranches vers une page de gestion du détail, ligne par ligne, c'est ça ?

    Si oui, regarde plutôt du côté de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <f:setPropertyActionListener target="#{monManagerDétail.entite}" value="#{item}"/>
    où "item" représente l'objet d'itération pour un dataTable

    Peux-tu montrer le code de ta page d'appel ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre averti
    Inscrit en
    Février 2011
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 26
    Par défaut
    Pour ceux que ça intéresse j'ai trouvé une solution :
    Quand j’accède à ma vue de création/modification je passe maintenant en Get et plus en Post et avec un parametre "type".
    si type = modif c'est que je viens d'une entité à modifier et je la charge donc dans mon bean, sinon c'est que c'est une création et donc je créé une nouvelle entité

    Je n'arrivais pas à passer de paramètre via f:param parce que j'étais sur un h:commandButton (donc en POST)

    Merci en tout cas pour votre aide

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 25/03/2014, 08h01
  2. Réponses: 1
    Dernier message: 30/09/2013, 14h06
  3. Réponses: 16
    Dernier message: 17/01/2010, 09h33
  4. Réponses: 1
    Dernier message: 06/05/2008, 16h09

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