刷新页面以加载新的区域设置



我正在尝试让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

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

无论如何,通常的做法是将用户指定的区域设置存储在会话范围中。当您希望通过JSF操作方法更改它时,您需要在之后发送一个重定向,以便使用所需的语言环境创建一个新视图。否则,初始区域设置将在响应中使用,因此您必须在当前视图中通过 更改它。
FacesContext.getCurrentInstance().getViewRoot().setLocale(newLocale);

相关内容

  • 没有找到相关文章

最新更新