Помогите, пожалуйста, с интернализацией в сервлетах через куки.
Вот так я добавил на страницу бандл
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<fmt:setLocale value="${cookie['lang'].value}"/>
<fmt:setBundle basename="messages"/>
Вот фильтр, который добавляет кукис lang в response
@WebFilter("/*")
public class CookieLocaleFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
if (req.getParameter("locale") != null) {
Cookie cookie = new Cookie("lang", req.getParameter("locale"));
res.addCookie(cookie);
}
chain.doFilter(request, response);
}
}
Вот так вот я меняю язык
<li><a href="?locale=en"><fmt:message key="label.lang.en" /></a></li>
<li><a href="?locale=ua"><fmt:message key="label.lang.ua" /></a></li>
Проблема в том, что язык меняется только со второго нажатия по ссылке.
Первый раз - добавляется куки в браузер, но на странице ничего не происходит и
не меняет значение абсолютно. На второе нажатие по ссылке - уже меняется язык.
Что я делаю не так?
P.S.
Объясняю подробнее:
Допустим, я перехожу по ссылке ?locale=ua.
<c:out value="${cookie['lang'].value}"/>
Выводит
en, первое нажатие - ничего ( только куки в браузере появились ), второе нажатие - поменялся вывод на
ua
Такое чувство, что куки читаются только со второго перехода на страницу. Или страница загружается как-то раньше обновлений куки.