На моей странице xhtml у меня есть следующий тег:
<f:view locale="#{languageBean.locale}">
...
</f:view>
Я реализовал языковой компонент:
@ManagedBean(name = "languageBean")
@SessionScoped
public class LanguageBean implements Serializable {
private static final long serialVersionUID = -4260383661321467037L;
...
private Locale locale = FacesContext.getCurrentInstance().getViewRoot().getLocale();
public String switchToDE() {
LOGGER.info("switching to german");
Locale german = Locale.GERMAN;
FacesContext.getCurrentInstance().getViewRoot().setLocale(german);
this.locale = german;
return null;
}
public String switchToEN() {
LOGGER.info("switching to english");
Locale english = Locale.ENGLISH;
FacesContext.getCurrentInstance().getViewRoot().setLocale(english);
this.locale = english;
return null;
}
public Locale getLocale() {
return locale;
}
public void setLocale(final Locale locale) {
this.locale = locale;
}
}
Затем я хочу отобразить commandLinks для переключения локали:
<ul>
<li>
<h:form>
<h:commandLink class="" action="#{languageBean.switchToDE}">Deutsch</h:commandLink>
</h:form>
</li>
<li>
<h:form>
<h:commandLink action="#{languageBean.switchToEN}">English</h:commandLink>
</h:form>
</li>
</ul>
В некоторых местах на моей странице есть несколько выходов, на которых я отрисовываю сообщения:
#{msg['message.key.1']
В моем файле face-config.xml я настроил:
<locale-config>
<default-locale>de</default-locale>
<supported-locale>de</supported-locale>
<supported-locale>en</supported-locale>
</locale-config>
Теперь моя проблема: первый щелчок вызывает метод переключения языка, но пакеты сообщений не обновляются на странице.Если я нажимаю второй раз на том же языке, пакет сообщений обновляется.Поиск пакета сообщений всегда на один шаг позади переключения локали.Как я могу переключить локаль с тегом h: commandButton (мне нужна ссылка и руководство по стилю не разрешают использовать или), чтобы поиск пакета сообщений был синхронизирован?
Я использую GF 2.1 с Mojarra 2.0.9(JSF 2.0 на основе Servlet API 2.5).Любой совет приветствуется.
РЕДАКТИРОВАТЬ:
Хорошо, я узнал, что это была моя вина, потому что мы пробовали некоторые "особые" вещи; -)
Я пытаюсь объяснитьчто у нас есть и что мы пытаемся:
- мы создаем наше программное обеспечение с помощью maven
- мы разделили логически разные веб-приложения для разных бизнес-целей в репозитории SVN
- во время сборки мы объединяем все веб-приложения в одно (наложение WAR)
- , поэтому у нас есть для каждого бизнес-приложения веб-приложения.xml зарегистрирован
- каждое веб-приложение имеет свой собственный пакет ресурсов, зарегистрированный с именем "msg "
- у нас есть общее веб-приложение (фреймворк), которое отображает элементы навигации для всех зарегистрированных веб-приложений
- каждый веб-сайт имеет возможность зарегистрировать nav-элементы.
- фреймворктеперь пытается объединить все пакеты ресурсов в один большой пакет ресурсов во время фазы, на которой будут возвращены текущие элементы навигации.
Я обнаружил, что метод "getItems ()" в нашем компоненте навигации называетсядо запуска метода switchLocale и, следовательно, переключение языкового стандарта происходит слишком поздно.
Теперь я пытаюсь спросить, есть ли возможность переключить языковой стандарт с помощью h: commandLink или, возможно, с помощью ah: outputLink, чтобыпереключение локали происходит до того, как будет запущен метод вспомогательного компонента для getItems ()?
Я надеюсь, что я объяснил свой "вызов", чтобы он был понятен.