i18n через h: ссылка или h: кнопка - PullRequest
0 голосов
/ 06 января 2012

Все учебники реализуют i18n через h: selectOneMenu или другой тип выбора. Есть ли способ реализовать i18n через кнопку h: хотя бы? Я попытался назначить метод bean-компонента свойству output , но он выдает ошибку. При назначении метода bean свойство action не оказывает никакого влияния.

<h:button outcome="#{languageController.currentLanguage}" value = "#{appMessage['link.label.language.english']}">
   <f:param name="selectedLanguage" value="en" />
</h:button>

public String changeLanguage(){
    FacesContext facesContext = FacesContext.getCurrentInstance();
    String selectedLocale = facesContext.getExternalContext().getRequestParameterMap().get("selectedLanguage");
    this.currentLanguage = selectedLocale;
    facesContext.getViewRoot().setLocale(new Locale(currentLanguage));
    return "welcome";
}

1 Ответ

0 голосов
/ 06 января 2012

<h:link> и <h:button> отправляют запрос GET, а не запрос POST.Значение outcome должно указывать на целевой вид.Вам необходимо установить параметр вида и выполнить действие в целевом представлении с помощью <f:viewParam> и <f:event type="preRenderView">.

<h:button outcome="welcome" value="#{appMessage['link.label.language.english']}">
    <f:param name="selectedLanguage" value="en" />
</h:button>

с помощью welcome.xhtml (проверка не указана)

<f:metadata>
    <f:viewParam name="selectedLanguage" value="#{languageController.currentLanguage}" />
    <f:event type="preRenderView" listener="#{languageController.changeLanguage}" />
</f:metadata>

и в компоненте

public void changeLanguage() {
    FacesContext facesContext = FacesContext.getCurrentInstance();
    facesContext.getViewRoot().setLocale(new Locale(currentLanguage));
}

См. Также:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...