Ottieni richieste e parametri di sessione e attributi dalle pagine JSF

Sto usando JSF con facelet e ho bisogno di ottenere i parametri di richiesta e sessione all’interno della pagina JSF. Nelle pagine JSP ho ottenuto questo parametro: "${requestScope.paramName}" o "${sessionScope.paramName}" . Ma ora, dopo aver usato JSF, ci sono solo bean e non è ansible ottenere alcun valore eccetto gli attributi bean.

NOTA: la sessione attribuisce ciò che mi serve è auto-compilato usando la sicurezza di acegi, quindi non posso accedervi.

Quindi cosa si fa adesso?

Puoi ottenere un ID parametro di richiesta usando l’espressione:

  
  • param – Una mappa immutabile dei parametri di richiesta per questa richiesta, con chiave per nome parametro. È incluso solo il primo valore per ogni nome di parametro.
  • sessionScope: una mappa degli attributi di sessione per questa richiesta, con chiave per nome attributo.

La Sezione 5.3.1.2 della specifica JSF 1.0 definisce gli oggetti che devono essere risolti dal risolutore di variabili.

È anche ansible utilizzare un bean (è consigliabile la richiesta scope) e accedere direttamente al contesto tramite FacesContext.

È ansible ottenere gli oggetti HttpServletRequest e HttpServletResposne utilizzando il seguente codice:

 HttpServletRequest req = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest(); HttpServletResponse res = (HttpServletResponse)FacesContext.getCurrentInstance().getExternalContext().getResponse(); 

Dopo questo, puoi accedere ai singoli parametri tramite getParameter(paramName) o accedere alla mappa completa tramite getParameterMap() object req

Il motivo per cui suggerisco un bean con ambito di richiesta è che è ansible utilizzarli durante l’inizializzazione (lo scenario peggiore è il costruttore.) La maggior parte dei framework offre spazio per l’esecuzione del codice al momento di inizializzazione del bean) e verranno eseguiti al momento della richiesta.

È, tuttavia, un po ‘un trucco. 😉 Potresti voler vedere se esiste un modulo Acegi JSF che ti consentirà di accedere alle variabili che ti servono.

Puoi usare

o

Tuttavia se vuoi passare i parametri ai tuoi backing bean, usando f:viewParam è probabilmente quello che vuoi. “Un parametro di visualizzazione è un mapping tra un parametro di stringa di query e un valore di modello.”

Questo imposterà il parametro id del parametro GET al campo entryId del bean blog. Vedi http://java.dzone.com/articles/bookmarkability-jsf-2 per i dettagli.

Ti può piacere questo:

 #{requestScope["paramName"]} ,#{sessionScope["paramName"]} 

Perché requestScope o sessionScope è un object Mappa.

Puoi anche utilizzare uno strumento come PrettyFaces di OcpSoft per iniettare i valori dei parametri dinamici direttamente in Fagioli JSF.

Supponendo che tu abbia già messo il tuo object come attributo sulla mappa di sessione dell’istanza corrente di FacesContext dal tuo bean gestito, puoi ottenerlo dalla pagina JSF:

  

Se il tuo object ha una proprietà, prendilo da:

  

Sei sicuro di non poter accedere alle variabili di scope richiesta / sessione da una pagina JSF?

Questo è quello che sto facendo nella nostra pagina di accesso, usando Spring Security:

  #{SPRING_SECURITY_LAST_EXCEPTION.message}