Como obter a localidade do visitante em JSP usando SessionLocaleResolver do Spring 3
-
28-10-2019 - |
Pergunta
Preciso obter a localidade de um visitante em minhas páginas JSP para que possa exibir corretamente um menu suspenso com uma lista de idiomas e ter o idioma selecionado de acordo com sua localidade atual.Normalmente, eu poderia fazer algo como ${pageContext.request.locale}
.
O problema, eu acho , é que só me dá a localidade de acordo com os cabeçalhos de solicitação do usuário (o que o navegador envia).Mas o usuário pode ter mudado seu idioma / localidade, então eu preciso usar o mecanismo do Spring que examina a sessão também:
RequestContextUtils.getLocale(request).toString();
Mas não é tão fácil acessar isso em uma página JSP e fazer com que o código JSP funcione com ela.
Ou existe outro mecanismo mais fácil para exibir um menu suspenso de idiomas para um usuário?O Spring armazena a localidade atual em um objeto facilmente acessível a partir de JSP?
Solução
Conforme você usa o SessionLocaleResolver, o local atual é armazenado na sessão usando um nome de atributo especificado na classe SessionLocaleResolver.A referência ao SessionLocaleResolver é armazenada na solicitação usando outro nome de atributo (org.springframework.web.servlet.DispatcherServlet # LOCALE_RESOLVER_BEAN_NAME).
Não vejo uma maneira fácil de obter a localidade diretamente na página jsp sem usar o código java.
Gostaria de obter o local atual e criar a lista de idiomas selecionáveis no controlador e adicioná-lo ao modelo.
Isso torna o código testável e move o código java do jsp para o controlador.
Outras dicas
Para nós
${pageContext.response.locale}
fez o truque.Esta propriedade segue o que foi configurado pelo resolvedor local do Spring.
Solução de uma linha ..
RequestContextUtils.getLocale(request)