Bonjour tous le monde,
Aujourd'hui j'ai un soucis de rafraichissement de ma page.
En effet j'avais naïvement pensé que facelet et le templating me permettrais de rafraichir uniquement la partie changeante du code... et finalement, ce n'est pas le cas, quand je clique sur une action toute la page se rafraichit.

J'ai donc regarder ce que RichFaces pouvait faire pour moi.
et j'ai constaté qu'il existe un tag include dans a4j.

Trop cool! je vais mettre ca en œuvre et ca devrait marcher... "ou pas"

Donc j'utilise: facelets + jsf + richfaces 3.3.2SR1.

En fait j'ai un managed bean assez bête qui ressemble à ça:

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
 
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.proximeo.restaurant.jsf;
 
/**
 *
 * @author Christophe
 */
public class MenuController {
 
    private static final String CREATE_EVENT_TYPE = "/pages/events/type/create.xhtml";
    private static final String UPDATE_EVENT_TYPE = "/pages/events/type/update.xhtml";
    private static final String DELETE_EVENT_TYPE = "/pages/events/type/delete.xhtml";
    private String selectedPage = "/pages/startPage.xhtml";
 
    /**
     * @return the selectedPage
     */
    public String getSelectedPage() {
        return selectedPage;
    }
 
    /**
     * @param aSelectedPage the selectedPage to set
     */
    public void setSelectedPage(String selectedPage) {
        this.selectedPage = selectedPage;
    }
 
 
    /**
     * @return the createEventType
     */
    public void createEventTypePage() {
        setSelectedPage(CREATE_EVENT_TYPE);
    }
 
    /**
     * @return the updateEventType
     */
    public void updateEventTypePage() {
        setSelectedPage(UPDATE_EVENT_TYPE);
    }
 
    /**
     * @return the deleteEventType
     */
    public void deleteEventTypePage() {
        setSelectedPage(DELETE_EVENT_TYPE);
    }
 
 
 
}
Quand je clique sur le panelMenuItem "Création d'un type d'événement" dans le menu qui ressemble à ça:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
 
<rich:panelMenuGroup label="Type d'événement">
  <rich:panelMenuItem label="Création d'un type d'événement" action="#{menuController.createEventTypePage}"/>
  <rich:panelMenuItem label="Mise à jour d'un type d'événement" action="#{menuController.updateEventTypePage}"/>
  <rich:panelMenuItem label="Suppression d'un type d'événement" action="#{menuController.deleteEventTypePage}"/>
</rich:panelMenuGroup>
 
(...)
J'aimerais qu'un peu plus bas, dans le même fichier le contenu de ma page s'affiche:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
(...)
<a4j:include id="contentPage" viewId="#{menuController.selectedPage}" />
Quand je fais cela j'ai une jolie erreur :

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
Caused by: javax.faces.FacesException: UIInclude component contentPage could't include page with path /pages/events/type/create.xhtml
        at org.ajax4jsf.taglib.html.facelets.IncludeHandler.applyNextHandler(IncludeHandler.java:83)
        at com.sun.facelets.tag.jsf.ComponentHandler.apply(ComponentHandler.java:190)
        at com.sun.facelets.tag.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:47)
        at com.sun.facelets.tag.jsf.core.ViewHandler.apply(ViewHandler.java:109)
        at com.sun.facelets.tag.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:47)
        at com.sun.facelets.compiler.NamespaceHandler.apply(NamespaceHandler.java:49)
        at com.sun.facelets.tag.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:47)
        at com.sun.facelets.compiler.EncodingHandler.apply(EncodingHandler.java:39)
        at com.sun.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:248)
        at com.sun.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:294)
        at com.sun.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:273)
        at com.sun.facelets.impl.DefaultFaceletContext.includeFacelet(DefaultFaceletContext.java:140)
        at com.sun.facelets.tag.ui.CompositionHandler.apply(CompositionHandler.java:116)
        at com.sun.facelets.compiler.NamespaceHandler.apply(NamespaceHandler.java:49)
        at com.sun.facelets.compiler.EncodingHandler.apply(EncodingHandler.java:39)
        at com.sun.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:248)
        at com.sun.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:294)
        at com.sun.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:273)
        at com.sun.facelets.impl.DefaultFaceletContext.includeFacelet(DefaultFaceletContext.java:140)
        at org.ajax4jsf.taglib.html.facelets.IncludeHandler.applyNextHandler(IncludeHandler.java:81)
        ... 173 more
Caused by: javax.faces.FacesException: UIInclude component contentPage could't include page with path /pages/events/type/create.xhtml
        at org.ajax4jsf.taglib.html.facelets.IncludeHandler.applyNextHandler(IncludeHandler.java:83)
        at com.sun.facelets.tag.jsf.ComponentHandler.apply(ComponentHandler.java:190)
        at com.sun.facelets.tag.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:47)
        at com.sun.facelets.tag.jsf.core.ViewHandler.apply(ViewHandler.java:109)
        at com.sun.facelets.tag.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:47)
        at com.sun.facelets.compiler.NamespaceHandler.apply(NamespaceHandler.java:49)
        at com.sun.facelets.tag.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:47)
        at com.sun.facelets.compiler.EncodingHandler.apply(EncodingHandler.java:39)
        at com.sun.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:248)
        at com.sun.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:294)
        at com.sun.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:273)
        at com.sun.facelets.impl.DefaultFaceletContext.includeFacelet(DefaultFaceletContext.java:140)
        at com.sun.facelets.tag.ui.CompositionHandler.apply(CompositionHandler.java:116)
        at com.sun.facelets.compiler.NamespaceHandler.apply(NamespaceHandler.java:49)
        at com.sun.facelets.compiler.EncodingHandler.apply(EncodingHandler.java:39)
        at com.sun.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:248)
        at com.sun.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:294)
        at com.sun.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:273)
        at com.sun.facelets.impl.DefaultFaceletContext.includeFacelet(DefaultFaceletContext.java:140)
        at org.ajax4jsf.taglib.html.facelets.IncludeHandler.applyNextHandler(IncludeHandler.java:81)
        ... 192 more
Caused by: javax.faces.FacesException: UIInclude component contentPage could't include page with path /pages/events/type/create.xhtml
        at org.ajax4jsf.taglib.html.facelets.IncludeHandler.applyNextHandler(IncludeHandler.java:83)
        at com.sun.facelets.tag.jsf.ComponentHandler.apply(ComponentHandler.java:190)
        at com.sun.facelets.tag.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:47)
        at com.sun.facelets.tag.jsf.core.ViewHandler.apply(ViewHandler.java:109)
        at com.sun.facelets.tag.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:47)
        at com.sun.facelets.compiler.NamespaceHandler.apply(NamespaceHandler.java:49)
        at com.sun.facelets.tag.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:47)
        at com.sun.facelets.compiler.EncodingHandler.apply(EncodingHandler.java:39)
        at com.sun.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:248)
        at com.sun.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:294)
        at com.sun.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:273)
        at com.sun.facelets.impl.DefaultFaceletContext.includeFacelet(DefaultFaceletContext.java:140)
        at com.sun.facelets.tag.ui.CompositionHandler.apply(CompositionHandler.java:116)
        at com.sun.facelets.compiler.NamespaceHandler.apply(NamespaceHandler.java:49)
        at com.sun.facelets.compiler.EncodingHandler.apply(EncodingHandler.java:39)
        at com.sun.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:248)
        at com.sun.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:294)
        at com.sun.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:273)
        at com.sun.facelets.impl.DefaultFaceletContext.includeFacelet(DefaultFaceletContext.java:140)
        at org.ajax4jsf.taglib.html.facelets.IncludeHandler.applyNextHandler(IncludeHandler.java:81)
        ... 211 more
Caused by: javax.faces.FacesException: UIInclude component contentPage could't include page with path /pages/events/type/create.xhtml
        at org.ajax4jsf.taglib.html.facelets.IncludeHandler.applyNextHandler(IncludeHandler.java:83)
        at com.sun.facelets.tag.jsf.ComponentHandler.apply(ComponentHandler.java:190)
        at com.sun.facelets.tag.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:47)
        at com.sun.facelets.tag.jsf.core.ViewHandler.apply(ViewHandler.java:109)
        at com.sun.facelets.tag.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:47)
        at com.sun.facelets.compiler.NamespaceHandler.apply(NamespaceHandler.java:49)
        at com.sun.facelets.tag.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:47)
        at com.sun.facelets.compiler.EncodingHandler.apply(EncodingHandler.java:39)
        at com.sun.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:248)
        at com.sun.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:294)
        at com.sun.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:273)
        at com.sun.facelets.impl.DefaultFaceletContext.includeFacelet(DefaultFaceletContext.java:140)
        at com.sun.facelets.tag.ui.CompositionHandler.apply(CompositionHandler.java:116)
        at com.sun.facelets.compiler.NamespaceHandler.apply(NamespaceHandler.java:49)
        at com.sun.facelets.compiler.EncodingHandler.apply(EncodingHandler.java:39)
        at com.sun.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:248)
        at com.sun.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:294)
        at com.sun.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:273)
        at com.sun.facelets.impl.DefaultFaceletContext.includeFacelet(DefaultFaceletContext.java:140)
        at org.ajax4jsf.taglib.html.facelets.IncludeHandler.applyNextHandler(IncludeHandler.java:81)
        ... 230 more
Caused by: javax.faces.FacesException: UIInclude component contentPage could't include page with path /pages/events/type/create.xhtml
        at org.ajax4jsf.taglib.html.facelets.IncludeHandler.applyNextHandler(IncludeHandler.java:83)
        at com.sun.facelets.tag.jsf.ComponentHandler.apply(ComponentHandler.java:190)
        at com.sun.facelets.tag.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:47)
        at com.sun.facelets.tag.jsf.core.ViewHandler.apply(ViewHandler.java:109)
        at com.sun.facelets.tag.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:47)
        at com.sun.facelets.compiler.NamespaceHandler.apply(NamespaceHandler.java:49)
        at com.sun.facelets.tag.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:47)
        at com.sun.facelets.compiler.EncodingHandler.apply(EncodingHandler.java:39)
        at com.sun.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:248)
        at com.sun.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:294)
        at com.s
qui se traduit par ce message dans le navigateur:
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
 
 
type Rapport d'exception
 
Message
 
DescriptionLe serveur a rencontré une erreur interne () qui l'a empêché de remplir cette requête.
 
Exception
 
javax.servlet.ServletException: UIInclude component contentPage could't include page with path /pages/events/type/create.xhtml
 
(...)
 
Cause racine
 
javax.faces.FacesException: UIInclude component contentPage could't include page with path /pages/events/type/create.xhtml
 
Cause racine
 
javax.faces.FacesException: UIInclude component contentPage could't include page with path /pages/events/type/create.xhtml
 
Cause racine
 
javax.faces.FacesException: UIInclude component contentPage could't include page with path /pages/events/type/create.xhtml
 
Cause racine
 
javax.faces.FacesException: UIInclude component contentPage could't include page with path /pages/events/type/create.xhtml
 
Cause racine
 
com.sun.facelets.tag.TagAttributeException: /templates/administration.xhtml @96,147 action="#{menuController.createEventTypePage}" Could not Resolve Variable [Overflow]: menuController
 
Cause racine
 
javax.el.ELException: Could not Resolve Variable [Overflow]: menuController
 
Cause racine
 
java.lang.StackOverflowError
je me suis dit bon je vais mettre directement l'emplacement de page pour faire test, like that:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
<a4j:include id="contentPage" viewId="/pages/events/type/create.xhtml" />
et j'ai toujours l'erreur. J'ai donc un peu chercher sur internet et il s'avère que plusieurs personnes ont déjà eu la même erreur mais sans réponse:
http://community.jboss.org/message/12598

Bref! quelqu'un connait il le problème que je rencontre, ou quelqu'un à t'il une solution pour que je puisse rafraichir qu'une seule partie de ma page et pas la totalité (merci de ne pas me proposer la solution des frames )