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 :

Exécuter une action métier juste après l'invocation de l'action d'un commandButton.


Sujet :

JSF Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 124
    Points : 86
    Points
    86
    Par défaut Exécuter une action métier juste après l'invocation de l'action d'un commandButton.
    Bonjour, j'ai un petit soucis avec une liste qui nécessite d'être réactualisée pour affichage après la création d'un élément.

    Sur ma page jsf j'ai :
    - Un datatable qui affiche une liste de personnes.
    - Un formulaire permettant de créer des personnes.

    Niveau métier, je dois faire appel à deux backing beans :
    - un premier qui permet la création de la personne.
    - un second qui permet l'actualisation de la liste des personnes.

    Il faudrait que lors du clic sur le commandButton du formulaire la méthode de création soit appelée et ensuite la méthode d'actualisation.

    Pouvez-vous me dire comment je peux faire ça svp ?

  2. #2
    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
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    A vrai dire c'est lorsque le nouvel enregistrement est créé qu'il faudrait recharger la liste, donc à priori sur le bouton "Enregistrer" de la création de personne.
    Tu utilises quelle bibliothèque de composants ? Primefaces, Richfaces, ...
    C'est une popup qui est utilisée pour la création ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 124
    Points : 86
    Points
    86
    Par défaut
    Pour la création ce n'est pas un popup et j'utilise primefaces.

    J'ai besoin de rafraichir la liste à cause du cache (j'utilise req.setHint("javax.persistence.cache.storeMode", "REFRESH");). Le problème est que le create est fait dans le controller de mon entité personne alors que le rafraichissement du cache est fait dans le controller d'une autre entité. Je ne peux donc pas faire le rafraichissement dans le create sans rendre mon code très peu générique au niveau des get sur les listes de personnes.

    J'ai résolu mon problème. Ca n'a pas l'air très académique mais ça marche dans mon cas. J'ai créé dans mon bean qui possède la liste de personne une méthode initListePersonne qui actualise la liste de personne.

    Si il y a une meilleur méthode je veux bien la connaitre.

    Voila un peu de code parce que j'ai conscience que sans support concret tout ça est un peu abstrait : (Le req.setHint("javax.persistence.cache.storeMode", "REFRESH"); est fait dans findByEmail().)

    - la partie intéressante de l'interface jsf :
    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
    <fieldset>
    	<legend>Membres : </legend>
    	<p:dataTable id="dtMembres" value="#{clubController.personne.personneCollection}" var="item">
    		<p:column>
    			<f:facet name="header">
    				<h:outputText value="IdPersonne"/>
    			</f:facet>
    			<h:outputText value="#{item.idPersonne}"/>
    		</p:column>
    		<p:column>
    			<f:facet name="header">
    				<h:outputText value="Cotisation"/>
    			</f:facet>
    			<h:outputText value="#{item.cotisation}"/>
    		</p:column>
    	</p:dataTable>
    </fieldset>
     
     
    <fieldset>
    	<legend>Création d un nouveau membre</legend>
    	<h:form>
    		<h:panelGrid id="pgCreateMembre" columns="2">
    			<p:outputLabel value="idPersonne: " for="idPersonne" />
    			<p:inputText id="idPersonne" value="#{personneController.personne.idPersonne}" />
    			<p:outputLabel value="cotisation: " for="cotisation" />
    			<p:inputText id="cotisation" value="#{personneController.personne.cotisation}" />
    		</h:panelGrid>
    		<br />
    		<p:commandButton value="Creer" action="#{personneController.create()}" update=":dtMembres">
    			<f:param name="init_liste" value="true" />
    		</p:commandButton>
    	</h:form>
    </fieldset>
    - le backing bean d'une personne
    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
    40
    41
    42
    43
    @Named("personneController")
    @RequestScoped
    public class PersonneController implements Serializable {
     
     
    	/
    	...
    	/
     
     
        private Personne personne;
        @EJB
        private business.sessions.PersonneFacadeLocal ejbFacadePersonne;
     
        public PersonneController() {
        }
     
        public Personne getPersonne() {
            if (personne == null)
                personne = new Personne();
     
            return personne;
        }
     
        private PersonneFacadeLocal getFacadePersonne() {
            return ejbFacadePersonne;
        }
     
        public void create() {
            try {
                getFacadePersonne().create(personne);
            } catch (Exception e) {
                return;
            }
        }
     
     
    	/
    	...
    	/
     
     
    }
    - Le backing bean club où sont inscrit les membres :
    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
    @Named("clubController")
    @ViewScoped
    public class ClubController implements Serializable {
     
        private String    remoteUser;
        private Personne  personne;
        @EJB
        private business.sessions.PersonneFacadeLocal ejbFacadePersonne;
     
        @PostConstruct
        public void init() {
            FacesContext context = FacesContext.getCurrentInstance();
            HttpServletRequest request = (HttpServletRequest) context.getExternalContext().getRequest();
            remoteUser = request.getRemoteUser();
        }
     
        private PersonneFacadeLocal getFacadePersonne() {
            return ejbFacadePersonne;
        }
     
        private void initPersonne() {
            personne = getFacadePersonne().findByEmail(remoteUser);
        }
     
        public Personne getPersonne() {
            if(personne == null) {
                initPersonne();
            } else {
                FacesContext context = FacesContext.getCurrentInstance();
                HttpServletRequest request = (HttpServletRequest) context.getExternalContext().getRequest();
                if(request.getParameter("init_liste") != null
                        && request.getParameter("init_liste").equals("true")) {
                    initPersonne();
                }
            }
     
            return personne;
        }
    }
    Je suis ouvert aux remarques sur la solution adoptée.

Discussions similaires

  1. Réponses: 3
    Dernier message: 05/04/2013, 13h26
  2. Réponses: 3
    Dernier message: 23/12/2012, 23h37
  3. Réponses: 4
    Dernier message: 28/07/2010, 16h33
  4. exécuter une action apres un moment
    Par keviin dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 13/10/2009, 08h14
  5. Réponses: 0
    Dernier message: 30/09/2009, 18h42

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