2010-07-13 7 views
1

J'utilise JSF 1.2 + Facelets + Apache Mes Visages sans Tomahawk ou d'autres libs. J'utilise un conteneur personnalisé. J'ai un scénario à implémenter mais je ne suis pas sûr Comment faire la même chose avec JSF + Facelets. Voici mes questions: Appréciez toute aide que vous pouvez fournir. Merci!Comment calculer en fonction des conditions dans les facelets?

Scénario: Je n'ai qu'une seule page + un bean de sauvegarde, Par défaut, la requête est envoyée à cette seule page et tout va bien. Sur la base de certaines données du bean backing une fois la requête arrivée, je détermine si l'utilisateur doit être autorisé à voir la page ou non. S'il ne devrait pas, je devrais envoyer l'utilisateur à une autre page ou une page d'erreur.

1) Est-il obligatoire d'utiliser un gabarit dans Facelets? 2) Comment réaliser si et sinon les conditions avec Facelets? C'est possible? 3) Est-ce correct? - Le constructeur Backing Bean retourne toujours à la page pour laquelle la requête est arrivée - Celui-ci est peu déroutant car les constructeurs ne peuvent pas retourner un "String" 4) Comment envoyer l'utilisateur à une autre page ou où placer au code pour l'envoyer à une page de diff?

Répondre

2

Cela ne doit pas être fait du côté de la vue, mais du côté du contrôleur. La pratique normale consiste à utiliser un Filter pour cela. Créer une classe qui implements Filter et fait essentiellement les éléments suivants (pseudo) dans doFilter() méthode:

if (request meets conditions) { 
    chain.doFilter(request, response); 
} else { 
    response.sendRedirect(errorPageURL); 
    // or response.sendError(statusCode, message); 
} 

vous pouvez également gérer également la redirection dans le constructeur de la fève avec l'aide de ExternalContext, mais ce n'est pas vraiment le bon endroit pour cela.

public Bean() { 
    if (request does not meet conditions) { 
     FacesContext.getCurrentInstance().getExternalContext().redirect(errorPageURL); 
     // Or externalContext.responseSendError(statusCode, message); 
    } 
}