我正在尝试让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>
Run Code Online (Sandbox Code Playgroud)
我尝试了以上所有按钮.它们都做同样的事情 - 它们调用方法更改区域设置,页面重新加载但新的区域设置标签未正确加载.此时,如果我再次重新加载,则更改会赶上并正确显示区域设置.
如何使按钮更早地更新本地,以便页面在显示时显示新的语言环境?
谢谢!
PS - 关于JSF 1.2
刷新之后,我不确定你是如何让它工作的.是#{admin.userLocale}存储在请求范围而不是会话范围?前四个按钮根本不会调用任何JSF操作.首先执行onclick中的JS函数,它会更改当前页面,因此默认操作完全中止.第五个似乎是唯一应该工作的,尽管<h:form>所有这些按钮都缺少了,但我敢打赌,这只是代码示例的过度简化.
无论如何,通常的做法是将用户指定的区域设置存储在会话范围中.如果要通过JSF操作方法更改它,则需要在之后发送重定向,以便使用所需的区域设置创建新视图.否则,初始语言环境确实会在响应中使用,因此您必须自己在当前视图中更改它
FacesContext.getCurrentInstance().getViewRoot().setLocale(newLocale);
Run Code Online (Sandbox Code Playgroud)
在动作方法中.
| 归档时间: |
|
| 查看次数: |
2163 次 |
| 最近记录: |