【问题标题】:Refreshing a page to load a new locale刷新页面以加载新的语言环境
【发布时间】:2011-04-10 14:10:27
【问题描述】:

我正在尝试让 JSF 重新加载语言环境(在视图中定义)

<f:view locale="#{admin.userLocale}">
    <h:commandButton image="images/ukflag.gif" action="#{admin.returnToEnglish}" immediate="true" onclick="window.location.reload()" /> 
    <h:commandButton value="1" action="#{admin.returnToEnglish}" immediate="true" onclick="window.location.reload()" />
    <h:commandButton value="2" action="#{admin.returnToEnglish}" immediate="true" onclick="history.go(0)" /> 
    <h:commandButton value="3" action="#{admin.returnToEnglish}" immediate="true" onclick="window.location.href=window.location.href" /> 
    <h:commandLink value="4">
        <a4j:support event="onclick" reRender="GeneralConfigForm" action="#{admin.returnToEnglish}" />
    </h:commandLink>
</f:view>

我尝试了上述所有按钮。 他们都做同样的事情 - 他们调用更改语言环境的方法,页面重新加载但新的语言环境标签未正确加载。 此时,如果我再次重新加载,更改就会赶上,并且可以正确显示语言环境。

如何使按钮更早更新本地,以便页面在启动时显示新的区域设置?

谢谢!

P.S - 在 JSF 1.2 上

【问题讨论】:

    标签: jsf locale


    【解决方案1】:

    我不确定你是如何在刷新后让它工作的。 #{admin.userLocale} 是否存储在请求范围而不是会话范围中?前四个按钮根本不会调用任何 JSF 操作。 onclick 中的 JS 函数首先执行并更改当前页面,因此默认操作完全中止。第五个似乎是唯一应该起作用的,虽然所有这些按钮都缺少&lt;h:form&gt;,但我敢打赌这只是代码示例的过度简化。

    无论如何,通常的做法是将用户指定的语言环境存储在会话范围内。当您想通过 JSF 操作方法更改它时,您需要在之后发送重定向,以便使用所需的语言环境创建新视图。否则,初始语言环境确实会在响应中使用,因此您必须自己在当前视图中更改它

    FacesContext.getCurrentInstance().getViewRoot().setLocale(newLocale);
    

    在动作方法中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-28
      • 2014-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-25
      相关资源
      最近更新 更多