webentwicklung-frage-antwort-db.com.de

Aktuelle Seite programmatisch abrufen

In einer JSF-Backing-Bean (Managed Bean, Weld Bean, spielt keine Rolle) kann ich den Kontextpfad ermitteln, auf dem sich der Client befindet, indem ich ihn aufrufe

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

Dies gibt mir den Pfad, auf den der Client gerade zugreift, wie /myapplication. Ist es auch möglich, die aktuelle Seite zu erhalten, wie /home.faces, und wie?

61
Ingo Fischer

Normalerweise möchten Sie hierfür UIViewRoot#getViewId() verwenden.

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

Dies ist in EL auch wie folgt verfügbar:

#{view.viewId}

Genau dieser Wert kann in Navigationsfallergebnissen wie <h:link outcome> Und <h:button outcome> Wiederverwendet werden.


Alternativ können Sie auch HttpServletRequest#getRequestURI() verwenden, um zu ermitteln, was der Endbenutzer tatsächlich in der Adressleiste des Browsers sieht.

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

Welches ist in EL auch wie folgt erhältlich:

#{request.requestURI}

Genau dieser Wert kann in <h:outputLink value> Oder einfach <a href> Wiederverwendet werden. Beachten Sie, dass Sie es nicht als Navigationsergebnis verwenden können.

113
BalusC

Ok, verstanden, ist es

FacesContext ctx = FacesContext.getCurrentInstance();
HttpServletRequest servletRequest = (HttpServletRequest) ctx.getExternalContext().getRequest();
// returns something like "/myapplication/home.faces"
String fullURI = servletRequest.getRequestURI();
13
Ingo Fischer
String uri = ((HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest()).getRequestURI();
3
Catfish