Java i18n通过h:链接或h:按钮

Java i18n通过h:链接或h:按钮,java,jsf,Java,Jsf,所有的教程都是通过一个h:SelectOne菜单或其他选择来实现i18n的。是否至少有一种通过h:按钮实现i18n的方法?我尝试将bean方法分配给output属性,但它抛出了一个错误。将bean方法分配给action属性根本没有效果 <h:button outcome="#{languageController.currentLanguage}" value = "#{appMessage['link.label.language.english']}"> <f:par

所有的教程都是通过一个h:SelectOne菜单或其他选择来实现i18n的。是否至少有一种通过h:按钮实现i18n的方法?我尝试将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";
}

公共字符串转换语言(){
FacesContext FacesContext=FacesContext.getCurrentInstance();
字符串selectedLocale=facesContext.getExternalContext().getRequestParameterMap().get(“selectedLanguage”);
this.currentLanguage=selectedLocale;
facesContext.getViewRoot().setLocale(新语言环境(currentLanguage));
返回“欢迎”;
}
发送GET请求,而不是POST请求。
结果
值需要指向目标视图。您需要设置视图参数,并通过
在目标视图中执行操作


使用in
welcome.xhtml
(省略验证)


在豆子里

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

如果你走这条路线,是的。或者,您可以从请求参数映射中获取它,这样您只需要放置
(它本身不需要
)。我发现在每个页面都必须访问changeLanguage很尴尬。我猜这是由getViewRoot()引起的。setLocale()。有没有办法使语言更改永久化,使每个页面的语言设置保持不变?只需创建一个主布局模板,然后在所有模板客户机中重复使用。