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 :

rechargement d'une ice:dataTable


Sujet :

JSF Java

  1. #1
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Octobre 2008
    Messages : 38
    Par défaut rechargement d'une ice:dataTable
    Bonjour,

    j'ai créé un popup qui me permet de gérer les colonnes de ma dataTable à afficher.
    Lorsque j'affiche le popup, j'ajoute ou supprime des colonnes à afficher.

    Or une fois que le popup se ferme, ma dataTable ne se recharge pas. Il faut que clique sur un header par exemple (car j'utilise le tag ice:commandSortHeader pour trier les colonnes) pour recharger ma dataTable et voir mes nouvelles colonnes sélectionnées.

    Ce que je voudrais, c'est généré un événement, ou quelque chose comme ça qui force le raffichage de ma dataTable à la fermeture de mon popup.

    Merci par avance

  2. #2
    Membre éclairé
    Inscrit en
    Juillet 2007
    Messages
    456
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 456
    Par défaut
    Salut,

    Icefaces permet d'envoyer des requêtes asynchrones au serveur http, sans intervention du client (toi ds ce cas). Tu dois pour cela implémenter l'interface Renderable est appelé une de ces méthodes. Regarde dans le guide développeur d'icefaces, ils expliquent très bien le mécanisme et il donne un exemple d'utilisation. Si tu arrives pas je te montrerais comment faire

  3. #3
    Membre éclairé
    Inscrit en
    Juillet 2007
    Messages
    456
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 456
    Par défaut
    je crois que c'est ici où ils traitent se point

    http://www.icefaces.org/docs/v1_7_1/...s3.html#999326

  4. #4
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Octobre 2008
    Messages : 38
    Par défaut
    ça a l'air un peu lourd tout ça non ?

    on ne peut pas dire que lorsque l'on ferme un popup, on submit un truc qui recharge le tableau ?

  5. #5
    Membre éclairé
    Inscrit en
    Juillet 2007
    Messages
    456
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 456
    Par défaut
    lourd pas du tout. J'utilise ce principe dans une application très critique et je suis très satisfait par ce mécanisme.

    En principe si tu cliques sur le bouton de fermeture de la popup, il y aura un appel au serveur et donc ta pas besoin de faire le rerender mais je me trompe peut être.

  6. #6
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Octobre 2008
    Messages : 38
    Par défaut
    Citation Envoyé par Esil2008 Voir le message
    Tu dois pour cela implémenter l'interface Renderable est appelé une de ces méthodes.
    je ne comprends pas comment mon bean (FilterBean) qui gère mes colonnes de ma dataTable doit forcer le rafraichissement de ma dataTable, qui elle est gérée par un second bean (ProductListBean).

    doit-je faire implémenter ProductListBean de Renderable ? et si oui quelle méthode dois-je appeler pour le coup dans mon FilterBean ?

  7. #7
    Membre éclairé
    Inscrit en
    Juillet 2007
    Messages
    456
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 456
    Par défaut
    c le backing bean qui doit implementer cette interface. Celui declarer dans le faces-config

  8. #8
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Octobre 2008
    Messages : 38
    Par défaut
    Citation Envoyé par Esil2008 Voir le message
    c le backing bean qui doit implementer cette interface. Celui declarer dans le faces-config
    mais mes 2 beans sont déclarés dans le faces-config

  9. #9
    Membre éclairé
    Inscrit en
    Juillet 2007
    Messages
    456
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 456
    Par défaut
    Le mettre pour le bean qui gère ta dataTable, c'est pas la peine de le faire pour l'autre à mon avis.

    Je te montre comment tu dois procéder :
    Dans le faces-config, crée un RederManager
    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
    <!-- Render Manager -->
    	<managed-bean>
    	    <description>
    	        Manages render calls to the Faces Context.
    	    </description>
    	    <managed-bean-name>
    	        rmanager
    	    </managed-bean-name>
    	    <managed-bean-class>
    	        com.icesoft.faces.async.render.RenderManager
    	    </managed-bean-class>
    	    <managed-bean-scope>
    	        application
    	    </managed-bean-scope>
    	</managed-bean>
    Dans la déclaration de ton backing bean tu dois rajouter cette propriété

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <managed-property>
    	       <property-name>renderManager</property-name>
    	       <value>#{rmanager}</value>
    	   	</managed-property>
    Maintenant dans ton bean rajoute ca
    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
     
    ProductListBean implements Renderable{
    ...
    static Renderable 				ObjectRenderer;
    	private RenderManager 			renderer 		= null;
    	private PersistentFacesState 	persistentState	= null;
     
    /**
             * This method is called to refresh all the bean in the server
             */
        public void reRender() { // C'est mieux de mettre ce code dans un thread a part
        	ObjectRenderer = this;
     
            if (renderer != null) {
                renderer.requestRender(ObjectRenderer);
            } 
        }
        /**
        * This method must be implemented when we implement the Rendrable interface
        * @param renderManager The instance of the object RenderManager
        */
        public void setRenderManager(RenderManager renderManager) {
                renderer = renderManager;
        }
     
        /** 
         * This method must be implemented when we implement the Rendrable interface
         * */
    	public PersistentFacesState getState() {
    		return persistentState;
    	}
     
    	/**
             *  Return exception of the rendring
             */
    	public void renderingException(RenderingException renderingException) {
     
    	}
    }
    Rajoute les getters et setters

    et mnt il suffit d'appeller reRender()

  10. #10
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Octobre 2008
    Messages : 38
    Par défaut
    je te remercie pour cette réponse qui est un peu plus clair pour moi

    mais malheureusement ma dataTable ne se recharge pas
    voici le code que j'ai ajouté dans mon FilterBean, pour forcer le rechargement de ma table à la fermeture de mon popup :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        public void validatePopup(ActionEvent event) {
        	plb = (ProductListBean) FacesContext.getCurrentInstance().getApplication().getVariableResolver().resolveVariable(FacesContext.getCurrentInstance(), "productListBean");
        	if(plb != null)
        		plb.reRender();
        }
    je passe bien dans la méthode reRender, car j'ai mis un System.out.

    PS : j'ai ajouté également dans mon constructeur le code suivant pour instancier l'attribut persistentState :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    persistentState = PersistentFacesState.getInstance();

  11. #11
    Membre éclairé
    Inscrit en
    Juillet 2007
    Messages
    456
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 456
    Par défaut
    PS : j'ai ajouté également dans mon constructeur le code suivant pour instancier l'attribut persistentState :
    Code :

    persistentState = PersistentFacesState.getInstance();
    Ta raison j'ai oublié de le préciser

    Comme ça devrait marcher sans problème, j'utilise moi aussi la même chose.

    Si jamais ta le synchronousUpdate à true met à false, de toute façon par défaut il est à false
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <context-param>
        <param-name>com.icesoft.faces.synchronousUpdate</param-name>
     
        <param-value>false</param-value>
      </context-param>
    Ta regardé le lien que t'es passé toute à l'heure ? Peut être il mentionne quelques chose que j'ai oublié

    EDIT

    Rajoute ca dans ton faces-config
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        <application>
    	    <view-handler>
    	        com.icesoft.faces.facelets.D2DFaceletViewHandler
    	    </view-handler>
        </application>
    J'espère que ça marchera mnt

  12. #12
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Octobre 2008
    Messages : 38
    Par défaut
    ajout dans mon faces-config.xml et web.xml

    verdict : pas mieux

  13. #13
    Membre éclairé
    Inscrit en
    Juillet 2007
    Messages
    456
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 456
    Par défaut
    montre moi stp ton faces-config

  14. #14
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Octobre 2008
    Messages : 38
    Par défaut
    Citation Envoyé par Esil2008 Voir le message
    montre moi stp ton faces-config
    le voilà ...
    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    <?xml version='1.0' encoding='UTF-8'?>
    <!DOCTYPE faces-config PUBLIC
            "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN"
            "http://java.sun.com/dtd/web-facesconfig_1_1.dtd">
     
    <faces-config>
        <application>
            <locale-config>
                <default-locale>en</default-locale>
            </locale-config>
        </application>
     
        <application>
    	    <view-handler>
    	        com.icesoft.faces.facelets.D2DFaceletViewHandler
    	    </view-handler>
        </application>
     
         <managed-bean>
            <description>
                Bean for common values.
            </description>
            <managed-bean-name>commonBean</managed-bean-name>
            <managed-bean-class>
                ip.client.bean.CommonBean
            </managed-bean-class>
            <managed-bean-scope>session</managed-bean-scope>
    		<managed-property>
    			<property-name>title</property-name>
    			<property-class>java.lang.String</property-class>
    			<value>Maquette V1-3</value>
    		</managed-property>
        </managed-bean>
     
        <managed-bean>
            <description>
                Bean for set the searches values.
            </description>
            <managed-bean-name>searchBean</managed-bean-name>
            <managed-bean-class>
                ip.client.bean.SearchBean
            </managed-bean-class>
            <managed-bean-scope>session</managed-bean-scope>
        </managed-bean>
     
        <managed-bean>
            <description>
                Bean for set the filtered values.
            </description>
            <managed-bean-name>filterBean</managed-bean-name>
            <managed-bean-class>
                ip.client.bean.FilterBean
            </managed-bean-class>
            <managed-bean-scope>session</managed-bean-scope>
        </managed-bean>
     
         <managed-bean>
            <description>
                Bean for set the product list tab.
            </description>
            <managed-bean-name>productListBean</managed-bean-name>
            <managed-bean-class>
                ip.client.bean.ProductListBean
            </managed-bean-class>
            <managed-bean-scope>session</managed-bean-scope>
            <managed-property>
    	       <property-name>renderManager</property-name>
    	       <value>#{rmanager}</value>
    	   	</managed-property>
        </managed-bean>
     
    	<!-- Render Manager -->
    	<managed-bean>
    	    <description>
    	        Manages render calls to the Faces Context.
    	    </description>
    	    <managed-bean-name>
    	        rmanager
    	    </managed-bean-name>
    	    <managed-bean-class>
    	        com.icesoft.faces.async.render.RenderManager
    	    </managed-bean-class>
    	    <managed-bean-scope>
    	        application
    	    </managed-bean-scope>
    	</managed-bean>
    </faces-config>

  15. #15
    Membre éclairé
    Inscrit en
    Juillet 2007
    Messages
    456
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 456
    Par défaut
    J'ai changé juste l'ordre des deux derniers beans, peut etre c'est important !!!
    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    <?xml version='1.0' encoding='UTF-8'?>
    <!DOCTYPE faces-config PUBLIC
            "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN"
            "http://java.sun.com/dtd/web-facesconfig_1_1.dtd">
     
    <faces-config>
        <application>
            <locale-config>
                <default-locale>en</default-locale>
            </locale-config>
        </application>
     
        <application>
    	    <view-handler>
    	        com.icesoft.faces.facelets.D2DFaceletViewHandler
    	    </view-handler>
        </application>
     
         <managed-bean>
            <description>
                Bean for common values.
            </description>
            <managed-bean-name>commonBean</managed-bean-name>
            <managed-bean-class>
                ip.client.bean.CommonBean
            </managed-bean-class>
            <managed-bean-scope>session</managed-bean-scope>
    		<managed-property>
    			<property-name>title</property-name>
    			<property-class>java.lang.String</property-class>
    			<value>Maquette V1-3</value>
    		</managed-property>
        </managed-bean>
     
        <managed-bean>
            <description>
                Bean for set the searches values.
            </description>
            <managed-bean-name>searchBean</managed-bean-name>
            <managed-bean-class>
                ip.client.bean.SearchBean
            </managed-bean-class>
            <managed-bean-scope>session</managed-bean-scope>
        </managed-bean>
     
        <managed-bean>
            <description>
                Bean for set the filtered values.
            </description>
            <managed-bean-name>filterBean</managed-bean-name>
            <managed-bean-class>
                ip.client.bean.FilterBean
            </managed-bean-class>
            <managed-bean-scope>session</managed-bean-scope>
        </managed-bean>
     
        <managed-bean>
            <description>
                Bean for set the column values.
            </description>
            <managed-bean-name>columnsBean</managed-bean-name>
            <managed-bean-class>
                ip.client.bean.ColumnsBean
            </managed-bean-class>
            <managed-bean-scope>session</managed-bean-scope>
        </managed-bean>
     
     	<!-- Render Manager -->
    	<managed-bean>
    	    <description>
    	        Manages render calls to the Faces Context.
    	    </description>
    	    <managed-bean-name>
    	        rmanager
    	    </managed-bean-name>
    	    <managed-bean-class>
    	        com.icesoft.faces.async.render.RenderManager
    	    </managed-bean-class>
    	    <managed-bean-scope>
    	        application
    	    </managed-bean-scope>
    	</managed-bean>
     
        <managed-bean>
            <description>
                Bean for set the product list tab.
            </description>
            <managed-bean-name>productListBean</managed-bean-name>
            <managed-bean-class>
                ip.client.bean.ProductListBean
            </managed-bean-class>
            <managed-bean-scope>session</managed-bean-scope>
            <managed-property>
    	       <property-name>renderManager</property-name>
    	       <value>#{rmanager}</value>
    	   	</managed-property>
        </managed-bean>
     
     
    </faces-config>
    Dit moi si ça change qlq chose

  16. #16
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Octobre 2008
    Messages : 38
    Par défaut
    Citation Envoyé par Esil2008 Voir le message
    Dit moi si ça change qlq chose
    pas mieux

  17. #17
    Membre éclairé
    Inscrit en
    Juillet 2007
    Messages
    456
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 456
    Par défaut
    Je vois pas d'où peux venir le problème

    Je sais que je té déjà demandé de mettre les setters et getters mais au cas ou ta oublié, surtout celle ci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public void setRenderManager( RenderManager renderManager ){ 
     
    		this.renderManager = renderManager; 
     
    	}

  18. #18
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Octobre 2008
    Messages : 38
    Par défaut
    bon j'ai essayé un truc tout bête et ça a fonctionné :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        	ProductListBean plb = (ProductListBean) FacesContext.getCurrentInstance().getApplication().getVariableResolver().resolveVariable(FacesContext.getCurrentInstance(), "productListBean");
        	if(plb != null){
        		plb.reloadTable();
        	}
    Tout simplement à la fermeture de mon popup, j'appelle une méthode de mon ProductListBean afin de lui faire recharger son DataModel. (j'ai d'ailleurs enlevé l'implémentation de Renderable et la définition du rendererManager dans le faces-config.xml)

    Et là par miracle ça fonctionne, comme quoi des fois il vaut meux essayer la solution la plus simple avant de chercher ce peut être compliqué.

    Néanmoins, je ne comprends pas pourquoi ça, ça fonctionne et pas le reste.

    En tout cas merci Esil2008

  19. #19
    Membre éclairé
    Inscrit en
    Juillet 2007
    Messages
    456
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 456
    Par défaut
    Content pour toi

    Ca marche ce que ta fait, par ce qu'il y a envoie d'une request au serveur http (le reload) du coup il recalcule le DOM et le renvoie au client

    Pour ce qui est du renderable, surement il ya un petit truc qui nous a échappé

    Bonne chance

  20. #20
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Octobre 2008
    Messages : 38
    Par défaut
    en tout cas encore

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

Discussions similaires

  1. comment éviter le rechargement d'une page?
    Par srikta dans le forum ASP
    Réponses: 2
    Dernier message: 13/04/2006, 11h54
  2. [tiles] rechargement d'une seule partie de la page
    Par Shivan dans le forum Struts 1
    Réponses: 6
    Dernier message: 10/04/2006, 11h42
  3. Rechargement d'une popup
    Par zyg dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 10/03/2006, 15h37
  4. [rechargement d'une frame mère à partir d'une frame fille]
    Par Lady_jade dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 09/12/2005, 12h02
  5. Rechargement d'une page après ouverture de deux popups
    Par petitmoosse dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 30/11/2005, 17h39

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