java jstl locale setlocale

¿Cómo establecer la configuración regional JSTL desde el código Java?



locale setlocale (5)

Hay otra manera. En el servlet, puede establecer la configuración regional creando un atributo de sesión, así:

request.getSession().setAttribute("javax.servlet.jsp.jstl.fmt.locale.session", "ko-KR");

Quiero establecer la configuración regional JSTL que utilizan <fmt:formatNumber> y amigos. Sé que esto es posible con <fmt:setLocale> , pero necesito hacerlo dinámicamente (según los datos de usuario recuperados de mi base de datos) y preferiría el código Java, una clase de filtro, para ser precisos.

Pensé que establecer el atributo de sesión javax.servlet.jsp.jstl.fmt.locale la configuración Locale deseada haría el truco, pero se ignora: las etiquetas JSTL siguen utilizando la configuración regional del navegador.

Verifiqué que no hay un contexto de página o atributos de solicitud del mismo nombre.

Entonces, ¿qué estoy haciendo mal? ¿O realmente necesito hacerlo desde un JSP?

Al leer el código JSTL, encontré referencias a un LocalizationContext y creo que necesito establecer uno. Sin embargo, no pude entender exactamente cómo encaja en la imagen o cómo configurar una.


Puedes usar EL en <fmt:setLocale> . No necesita ser un valor codificado o algo así.

Aquí hay un ejemplo:

<c:set var="language" value="${not empty param.language ? param.language : not empty language ? language : pageContext.request.locale}" scope="session" /> <fmt:setLocale value="${language}" />

Si el idioma se proporcionó como parámetro de solicitud con el nombre del language , se configurará. De lo contrario, si el idioma ya estaba configurado previamente en la sesión por el language nombre del atributo, entonces cúmplalo. De lo contrario, utilice la configuración regional proporcionada por el usuario en el encabezado de la solicitud.

Si realiza una session.setAttribute("language", language) en su código de filtro, se utilizará, si no se ha establecido ningún parámetro de solicitud.

Ver también:


Que yo sepa, ''javax.servlet.jsp.jstl.fmt.locale'' está anulado por la configuración regional del navegador. JSTL usa la configuración regional del navegador y, si no se encuentra, utiliza una configuración regional alternativa. Por lo tanto, puede establecer un atributo de solicitud para especificar esa configuración regional. Añade esta línea a tu controlador

request.setAttribute("javax.servlet.jsp.jstl.fmt.fallbackLocale.request", "en-us");

Al usar esto se establecerá la configuración regional que JSTL usará. Anote la .request en el nombre del atributo, si establece este atributo en otro ámbito, tendrá que usar un sufijo diferente. Para HttpSession el sufijo es .session , para ServletContext el sufijo es .application


Si depende de los datos de la base de datos, es posible que haya una mejor manera de insertar esta lógica en su ''router'' o ''controller'' (depende de la estructura que esté usando). Solo extiende la url con el parámetro ?lang=''en''

Espero que esto ayude


necesitas el segundo

3 formas de establecer la configuración regional JSTL: / así como el paquete de recursos de aplicación, zona horaria y fuente de datos predeterminados

  1. Establecido por una acción JSTL: esto permite la especificación del alcance por el atributo de alcance.

    <fmt:setLocale value="en_US" scope="session"/>

  2. Establecer mediante programación: permite la especificación del alcance a través de la API de configuración.

    import javax.servlet.jsp.jstl.core.Config; (...) Config.set( session, Config.FMT_LOCALE, new java.util.Locale("en", "US") ) // or Locale.forLanguageTag("en-US") (java 1.7 and later)

  3. Establecido por los parámetros de inicialización del contexto : especifica el valor utilizado si no se encuentra la configuración en ninguno de los ámbitos estándar.

    <context-param> <param-name>javax.servlet.jsp.jstl.fmt.locale</param-name> <param-value>en_US</param-value> </context-param>

jstl-quick-reference (PDF)