Facelet templating + refresh selectif + a4j:include problème
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:
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:
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:
1 2 3
|
(...)
<a4j:include id="contentPage" viewId="#{menuController.selectedPage}" /> |
Quand je fais cela j'ai une jolie erreur :
Code:
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:
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:
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 :mouarf:)
Ca rafraichit d'accord, mais comment inclure la page?
Tout est dans le titre en fait j'ai regarder trop vite la doc... Le soucis c'est que je ne peu pas inclure un fichier source dans ce rich:panel ...
En bref : rafraichir une partie de la page ok, mais comment y inclure de manière dynamique la page xhtml?