JSF应用程序中的动态区域设置切换?

时间:2010-10-04 20:29:23

标签: jsf internationalization locale

我有一个应用程序,用户可以在我的应用程序的欢迎页面之间动态切换区域设置。我看到早期的开发人员(继承了没有太多文档的代码)已经从ViewHandler中覆盖了以下三个方法,并告诉我这是动态切换Locale所必需的...任何帮助都非常感谢

此外,请告诉我是否有更好的方法来处理此

public Locale calculateLocale(FacesContext facescontext)
{
    Locale userLocale = LocaleManager.getInstance().getCurrentLocale();
    if (userLocale != null)
    {
        return userLocale;
    }
    else
    {
        return delegate.calculateLocale(facescontext);
    }
}

public void renderView(FacesContext facescontext, UIViewRoot uiviewroot)
        throws IOException, FacesException {
    uiviewroot.setLocale(LocaleManager.getInstance().getCurrentLocale());
    delegate.renderView(facescontext, uiviewroot);
}
public UIViewRoot createView(FacesContext facescontext, String s)
{
    UIViewRoot view = delegate.createView(facescontext, s);
    view.setLocale(LocaleManager.getInstance().getCurrentLocale());
    return view;
}

1 个答案:

答案 0 :(得分:9)

我的解决方案是:

  • 拥有一个包含Locale实例
  • 的会话范围的托管bean
  • 为每种受支持的语言提供以下按钮(或链接):

    <h:commandButton action="#{localeBean.changeLocal}">
         <f:setPropertyActionListener target="#{localeBean.selectedLanguage}" 
                  value="en" />
    </h:commandButton>
    
  • 根据传递的语言(new Locale(lang)

  • 设置当前区域设置 模板中的
  • 使用<f:view locale="#{localeBean.currentLocale}">