2010-07-21 16 views
18

Come si ottiene l'URL della richiesta in un bean che supporta una pagina JSF? Ho cercato attraverso la documentazione FacesContext e il modo migliore che ho trovato sembra terribilmente lunga:Ottieni l'URL della richiesta in un bean JSF?

public String getRequestURL() 
{ 
    Object request = FacesContext.getCurrentInstance().getExternalContext().getRequest(); 
    if(request instanceof HttpServletRequest) 
    { 
      return ((HttpServletRequest) request).getRequestURL().toString(); 
    }else 
    { 
     return ""; 
    } 
} 

Edit: Requisiti funzionali Il requisito è che abbiamo bisogno l'URL completo per un terzo javascript utilità. L'uso o l'architettura dell'utilità non si adatta bene a JSF, ma tutto ciò non corrisponde a questa chiamata. Il metodo che ho trovato funzionerà, ma è stato sbagliato scavare così in profondità nel FacesContext. Inoltre speravo che ci sarebbe stato un modo per poter essere chiamato con JSF Expression Language poiché questo sarà usato in un modo "vista" correlato.

risposta

28

Se hai bisogno di trasportare l'API Servlet prima da sotto le cappe JSF dal FacesContext, allora è probabile che si sta facendo il lavoro al posto sbagliato. Di cosa si tratta, il requisito funzionale per cui hai pensato che questa fosse la soluzione giusta? Non dovresti forse usare una vera classe Servlet o Filter invece di un bean gestito JSF? O forse non hai bisogno dell'URL di richiesta perché ci sono modi migliori per "jsfish" di ottenere lo stesso risultato?

Se si aggiorna la domanda per includere i dettagli sui requisiti funzionali, potremmo essere in grado di suggerire la soluzione giusta.


Aggiornamento secondo il vostro edit: così, basta che dopo tutto nella vista laterale? Per esempio. #{bean.requestURL}? Puoi anche prenderlo dall'oggetto HttpServletRequest che è già implicitamente disponibile in EL.

Quando sei in JSP:

${pageContext.request.requestURL} 

O quando sei in Facelets:

#{request.requestURL} 

E ora, come si fa a bisogno per Javascript? Stampa come variabile JavaScript? Così?

var url = '#{request.requestURL}'; 

Se è così, si potrebbe anche solo afferrare window.location per questo.

var url = window.location; 

Non c'è bisogno di confondere il bean JSF con i dettagli della vista specifica.

+0

Grazie per aver chiarito tutti i vari metodi per estrarlo! – Adam

+0

Prego. Quale ha finalmente aiutato? :) – BalusC

+0

Alla fine ho potuto aggirarlo, ma avrei usato window.location – Adam

3

Hai già una risposta :) Temo che dovrai usarlo in questo modo, dal momento che ogni richiesta HTTP dovrà essere recuperata dal contesto dei volti. Potresti, ovviamente, semplificare parte di questo metodo, come il recupero del contesto dei volti, ma è definitivamente la strada da percorrere, a meno che non usi un qualche tipo di framework che astrae quei dettagli e ti permetta di arrivare direttamente all'oggetto HttpRequest.

Saluti.

Problemi correlati