Come ottenere le impostazioni locali del visitatore in JSP utilizzando SessionLocaleResolver di Spring 3
-
28-10-2019 - |
Domanda
Ho bisogno di ottenere la locale di un visitatore nelle mie pagine JSP in modo da poter visualizzare correttamente un menu a discesa con un elenco di lingue e avere la lingua selezionata in base alla loro locale corrente.Normalmente potrei fare qualcosa come ${pageContext.request.locale}
.
Il problema, credo , è che mi fornirà solo le impostazioni internazionali in base alle intestazioni della richiesta dell'utente (ciò che il browser invia).Ma l'utente potrebbe aver cambiato la propria lingua / locale, quindi ho bisogno di usare il meccanismo di Spring che guarda anche alla sessione:
RequestContextUtils.getLocale(request).toString();
Ma poi non è così facile accedervi in una pagina JSP e far funzionare il codice JSP.
O esiste un altro meccanismo più semplice per visualizzare un menu a discesa di lingue per un utente?Spring memorizza la locale corrente in un oggetto facilmente accessibile da JSP?
Soluzione
Quando si utilizza SessionLocaleResolver, la locale corrente viene memorizzata nella sessione utilizzando un nome di attributo specificato nella classe SessionLocaleResolver.Il riferimento a SessionLocaleResolver viene memorizzato nella richiesta utilizzando un altro nome di attributo (org.springframework.web.servlet.DispatcherServlet # LOCALE_RESOLVER_BEAN_NAME).
Non vedo un modo semplice per ottenere le impostazioni locali direttamente dalla pagina jsp senza utilizzare il codice java.
Recupererei le impostazioni internazionali correnti e creerei l'elenco delle lingue selezionabili nel controller e le aggiungerei al modello.
Questo rende il codice testabile e sposta il codice java da jsp al controller.
Altri suggerimenti
Per noi
${pageContext.response.locale}
ha fatto il trucco.Questa proprietà segue quanto impostato dal risolutore locale di Spring.
Soluzione in una riga ..
RequestContextUtils.getLocale(request)