2010-11-24 3 views
0

Je vais essayer d'expliquer mon dubt en très peu la ligne de code.JSF - modèle et appel ajax - les meilleures pratiques

template.xhtml - ici je charge une page nommée en tant que paramètre get (ex index.xhtml? page = Page d'accueil => i charger homepage.xhtml)

<h:panelGroup layout="block" id="content"> 
    <c:catch> 
     <ui:include src="#{selector.page}.xhtml" /> 
    </c:catch> 
</h:panelGroup> 

homepage.xhtml - ma propre page d'accueil (qui va changer si im connecté ou non)

<h:panelGroup rendered="#{!login.loggedIn}"> 
    <h:outputLabel styleClass="content_title" value="im not logged" /> 
</h:panelGroup> 
<h:panelGroup rendered="#{login.loggedIn}"> 
    <h:outputLabel styleClass="content_title" value="im logged" /> 
</h:panelGroup> 

ajax call - si e c'est le vrai problème; si je fais un appel comme celui-ci:

<f:ajax event="action" execute="param1 param2" render=":content"/> 

selector bean:

package model; 

import javax.faces.bean.ManagedProperty; 
import javax.faces.bean.ManagedBean; 
import javax.faces.bean.RequestScoped; 

@ManagedBean(name="selector") 
@RequestScoped 
public class Selector { 
    @ManagedProperty(value="#{param.page}") 
    private String page; 

    public String getPage() { 
     if(page.compareTo("")==0) { 
      this.page="homepage"; 
     } 
     return page; 
    } 

    public void setPage(String page) { 
     this.page=page; 
    } 
} 

Je vais charger les nouvelles données sur la panelGroup content, qui est défini sur le modèle. Le problème est que lorsque j'appelle cela, j'ai perdu le page parameter (réglé précédemment sur le bean sélecteur), et je ne peux pas recharger la page en cours.

Donc, l'astuce pour vous est:

1 - mettre la fève SessionScoped?

2 - Passer l'appel ajax la valeur d'obtention?

3 - Définir ma propre application d'une autre manière?

Toute suggestion serait appréciée :)

Répondre

1

passer à la demande suivante en tant que valeur d'entrée cachée sous la même forme.

<h:inputHidden value="#{selector.page}" /> 
+0

Uhm ouais. En fait cela sonne très étrange pour moi, car sur "exécuter" je voudrais passer seulement quelques paramètres, pas toute la forme (comme nous l'avons discuté le dernier jour). Je dois comprendre ceci sur ce cadre :) – markzzz

+0

Essayé de cette façon en ce moment, malheureusement, ne charge pas ce contenu. Je pense que j'ai besoin (en premier) de définir une valeur par défaut sur mon sélecteur Bean. Regardez le code mis à jour: il ne reçoit pas "index" quand j'appelle # {selector.page} sur le template. Je ne sais pas pourquoi ... – markzzz

+0

Oh non, ouais ça marche. J'ai juste besoin d'appeler cet inputhidden en tant que "page" :) de toute façon je continue à définir la valeur par défaut pour le bean. Merci pour les conseils BalusC, vous ressemble le maître de JSF :) – markzzz

Questions connexes