Dans un bean de sauvegarde JSF (Bean managé, Weld Bean, peu importe), je peux obtenir le chemin de contexte sur lequel se trouve le client en appelant
FacesContext ctx = FacesContext.getCurrentInstance();
String path = ctx.getExternalContext().getRequestContextPath();
Cela me donne le chemin d'accès auquel le client accède actuellement, comme /myapplication
. Est-il également possible d'obtenir le courant page, comme /home.faces
, et comment?
Vous souhaitez 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 réutilisable dans les résultats de cas de navigation tels que <h:link outcome>
Et <h:button outcome>
.
Alternativement, vous pouvez également utiliser HttpServletRequest#getRequestURI()
pour obtenir tout ce que l'utilisateur final voit réellement dans la barre d'adresse du navigateur.
String uri = ((HttpServletRequest) externalContext.getRequest()).getRequestURI();
Qui est en EL également disponible comme suit:
#{request.requestURI}
Exactement, cette valeur est réutilisable dans <h:outputLink value>
Ou simple <a href>
. Notez que vous ne pouvez pas l'utiliser comme résultat de cas de navigation.
Ok, j'ai compris
FacesContext ctx = FacesContext.getCurrentInstance();
HttpServletRequest servletRequest = (HttpServletRequest) ctx.getExternalContext().getRequest();
// returns something like "/myapplication/home.faces"
String fullURI = servletRequest.getRequestURI();
String uri = ((HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest()).getRequestURI();