В моем приложении я устанавливаю локаль, когда пользователь входит в систему, чтобы локализовать компоненты. Недавно я давал демо и заметил, что язык переключается с английского на голландский без видимой причины. Оказалось, что к демонстрационному серверу (размещенному на немецком сервере) в то же время обращался другой человек, который установил для него голландский язык, и это повлияло на мою английскую демонстрацию и наоборот.
Я попробовал это на своем компьютере с разными браузерами, используя обычный режим Chrome и режимы инкогнито и т. д., чтобы имитировать разные сеансы, и проблема присутствует. Любые идеи о том, как справиться/исправить это? Я думал, что Vaadin уже самостоятельно обрабатывает пользовательские сеансы, но кажется, что переменные приложения являются общими?
Вот что я делаю в своем приложении, чтобы изменить локаль:
@Override
public void setLocale(Locale locale) {
super.setLocale(locale);
xerb = ResourceBundle.getBundle("com.bluecubs.xinco.messages.XincoMessages", getLocale());
}
Затем пакет ресурсов xerb используется для интернационализации пользовательского интерфейса. Я пытался не выполнять супервызов, но результат тот же, как если бы xerb модифицировался различными сеансами и распределялся между ними.
Любые идеи?
Тот же вопрос на форуме Vaadin: https://vaadin.com/forum/-/message_boards/view_message/1091312
Изменить
Используя шаблон ThreadLocal, я добавил выходные данные, когда каждый экземпляр получен, и я вижу разные экземпляры для каждого браузера. (например, com.bluecubs.xinco.core.server.vaadin.Xinco@2114ed для первого и com.bluecubs.xinco.core.server.vaadin.Xinco@fd68fe для второго браузера), поэтому я считаю, что модель используется правильно. . К сожалению, я все еще вижу ту же проблему.
xerb
? Это поле в классе, которое расширяетcom.vaadin.Application
? - person Artur Nowak   schedule 27.01.2012xerb
из других классов? Используете ли вы шаблон ThreadLocal? - person Artur Nowak   schedule 27.01.2012