JSF 2.0 在整个会话中从浏览器和以编程方式设置区域设置 [重复]

Posted

技术标签:

【中文标题】JSF 2.0 在整个会话中从浏览器和以编程方式设置区域设置 [重复]【英文标题】:JSF 2.0 set locale throughout session from browser and programmatically [duplicate] 【发布时间】:2011-07-20 07:03:00 【问题描述】:

如何根据初始浏览器请求检测应用程序的区域设置,并在整个浏览会话期间使用它,直到用户专门更改区​​域设置,以及如何在剩余会话中强制使用此新区域设置?

【问题讨论】:

【参考方案1】:

创建一个会话范围的托管 bean,如下所示:

@ManagedBean
@SessionScoped
public class LocaleManager 

    private Locale locale;

    @PostConstruct
    public void init() 
        locale = FacesContext.getCurrentInstance().getExternalContext().getRequestLocale();
    

    public Locale getLocale() 
        return locale;
    

    public String getLanguage() 
        return locale.getLanguage();
    

    public void setLanguage(String language) 
        locale = new Locale(language);
        FacesContext.getCurrentInstance().getViewRoot().setLocale(locale);
    


要设置视图的当前语言环境,请将其绑定到主模板的 <f:view>

<f:view locale="#localeManager.locale">

要更改它,请将其绑定到带有语言选项的 &lt;h:selectOneMenu&gt;

<h:form>
    <h:selectOneMenu value="#localeManager.language" onchange="submit()">
        <f:selectItem itemValue="en" itemLabel="English" />
        <f:selectItem itemValue="nl" itemLabel="Nederlands" />
        <f:selectItem itemValue="es" itemLabel="Español" />
    </h:selectOneMenu>
</h:form>

要提高国际化页面的 SEO(否则会被标记为重复内容),请将语言绑定到 &lt;html&gt;

<html lang="#localeManager.language">

【讨论】:

如果我添加了不在 Locale 类定义中的 add tr,例如 Locale.CANADA,Locale.GERMAN。我在 faces-config.xml 中添加了; entr 但是它不起作用:/

以上是关于JSF 2.0 在整个会话中从浏览器和以编程方式设置区域设置 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 JSF 2.0 中使会话无效?

如何(以及何时?)在 JSF 2.0 中删除 Session 范围的 bean

JSF 2.0 应用程序的水平缩放

远程和以编程方式注销活动域用户

JSF 2.0 部分状态保存似乎不起作用

JSF 2.0 每页生成多个请求