2010-07-15 15 views
54

In un fagiolo JSF supporto (Managed Bean, Weld Bean, non importa), posso ottenere il percorso del contesto del cliente è il chiamandoOttenere pagina corrente a livello di codice

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

Questo mi dà il percorso del il cliente accede attualmente, come /myapplication. È anche possibile ottenere l'attuale pagina, come /home.faces e come?

risposta

102

Normalmente desidera utilizzare UIViewRoot#getViewId() per questo.

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

Questo si trova a El anche disponibili come segue:

#{view.viewId} 

Esattamente questo valore è riutilizzabile in caso di navigazione risultati, come <h:link outcome> e <h:button outcome>.


In alternativa, è anche possibile utilizzare HttpServletRequest#getRequestURI() per ottenere ciò l'utente finale è in realtà vedendo nella barra degli indirizzi del browser.

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

che è in EL disponibili anche come segue:

#{request.requestURI} 

Esattamente questo valore è riutilizzabile in <h:outputLink value> o semplice <a href>. Si noti che non è possibile utilizzarlo come risultato del caso di navigazione.

+1

Questo non funziona in modo affidabile. Ad esempio, con PrettyFaces questo non fornisce l'URL chiamato per creare la pagina corrente. – DoubleMalt

+1

@DoubleMalt: OP non ha indicato che sta usando PrettyFaces. – BalusC

+4

Anche se è vero, non ha dichiarato esplicitamente di non averlo fatto. Il mio punto era semplicemente che le librerie che estendono JSF potrebbero rompere la soluzione (e PrettyFaces è un miglioramento piuttosto comune in quanto la gestione della navigazione standard è piuttosto goffa). Volevo solo dare alle persone che scoprono che la soluzione pulita non funziona per loro un indizio sul perché. – DoubleMalt

12

Ok, capito, è

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

Spiega anche la tua risposta a parole. –

+0

Questo non aggiunge nulla alla/e risposta/i precedente/i. – Robert

Problemi correlati