2010-07-15 8 views
54

Dans un backing bean JSF (Managed Bean, Weld Bean, peu importe), je peux obtenir le chemin de contexte, le client est en appelantObtenir la page en cours par programme

FacesContext ctx = FacesContext.getCurrentInstance(); 
String path = ctx.getExternalContext().getRequestContextPath(); 

Cela me donne le chemin de la client accède actuellement, comme /myapplication. Est-il également possible d'obtenir la page actuelle , comme /home.faces, et comment?

Répondre

102

Vous voulez normalement utiliser UIViewRoot#getViewId() pour cela.

String viewId = facesContext.getViewRoot().getViewId(); 

C'est en EL également disponible comme suit:

#{view.viewId} 

Exactement cette valeur est dans le cas où les résultats reuseable de navigation tels que <h:link outcome> et <h:button outcome>.


Vous pouvez également utiliser HttpServletRequest#getRequestURI() pour obtenir ce que l'utilisateur final voit effectivement dans la barre d'adresse du navigateur.

String uri = ((HttpServletRequest) externalContext.getRequest()).getRequestURI(); 

Ce qui est en EL également disponible comme suit:

#{request.requestURI} 

Exactement cette valeur est en reuseable <h:outputLink value> ou <a href> plaine. Notez que vous ne pouvez pas l'utiliser comme résultat de navigation.

+1

Cela ne fonctionne pas correctement. Avec PrettyFaces par exemple, cela ne donne pas l'URL qui a été appelée pour créer la page en cours. – DoubleMalt

+1

@DoubleMalt: OP n'a pas indiqué qu'il utilise PrettyFaces. – BalusC

+4

Bien qu'il soit vrai, il n'a pas non plus déclaré explicitement qu'il ne l'avait pas fait. Mon propos était simplement que les bibliothèques qui étendent JSF pourraient casser votre solution (et PrettyFaces est une amélioration assez commune car la gestion de la navigation de l'implémentation standard est assez maladroite). Je voulais juste donner aux gens qui découvrent que votre solution propre ne fonctionne pas pour eux. – DoubleMalt

12

Ok, il a obtenu, il est

FacesContext ctx = FacesContext.getCurrentInstance(); 
HttpServletRequest servletRequest = (HttpServletRequest) ctx.getExternalContext().getRequest(); 
// returns something like "/myapplication/home.faces" 
String fullURI = servletRequest.getRequestURI(); 
2
String uri = ((HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest()).getRequestURI(); 
1
String str = ((HttpServletRequest) FacesContext.getCurrentInstance() 
.getExternalContext().getRequest()).getRequestURI(); 
System.out.println(str); 
+2

Veuillez également expliquer votre réponse par des mots. –

+0

Cela n'ajoute rien à la (aux) réponse (s) précédente (s). – Robert

Questions connexes