2010-07-15 16 views
54

In einer JSF Backing Bean (Managed Bean, Weld Bean, spielt keine Rolle), kann ich den Kontextpfad erhalten der Client ist durchHolen Sie sich aktuelle Seite programmatisch

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

Das gibt mir den Weg der Client greift derzeit auf, wie /myapplication. Ist es auch möglich, die aktuelle Seite, wie /home.faces, und wie?

Antwort

102

Sie normalerweise wollen UIViewRoot#getViewId() für diesen Einsatz.

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

Dies ist in EL erhältlich auch wie folgt:

#{view.viewId} 

Genau dieser Wert ist wieder verwendbar in Navigations Fall Ergebnisse wie <h:link outcome> und <h:button outcome>.


Alternativ können Sie auch HttpServletRequest#getRequestURI() verwenden zu bekommen, was die Enduser tatsächlich in der Browser-Adressleiste ist zu sehen.

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

, die in EL ist auch wie folgt:

#{request.requestURI} 

Genau dieser Wert ist wieder verwendbar in <h:outputLink value> oder schlicht <a href>. Beachten Sie, dass Sie es nicht als Ergebnis des Navigationsvorgangs verwenden können.

+1

Dies funktioniert nicht zuverlässig. Mit PrettyFaces zum Beispiel gibt dies nicht die URL, die zum Erstellen der aktuellen Seite aufgerufen wurde. – DoubleMalt

+1

@DoubleMalt: OP hat nicht angegeben, dass er PrettyFaces verwendet. – BalusC

+4

Obwohl es wahr ist, hat er auch nicht explizit gesagt, dass er das nicht getan hat. Mein Punkt war einfach, dass Bibliotheken, die JSF erweitern, Ihre Lösung zerstören könnten (und PrettyFaces ist eine ziemlich übliche Verbesserung, da die Navigation der Standardimplementierung ziemlich unbeholfen ist). Ich wollte nur Menschen, die herausfinden, dass Ihre saubere Lösung nicht funktioniert für sie ein Hinweis warum. – DoubleMalt

12

Ok, habe es, es ist

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

Bitte erläutern Sie Ihre Antwort auch in Worten. –

+0

Dies fügt nichts zu den vorherigen Antwort (en) hinzu. – Robert

Verwandte Themen