我遇到一种情况,当用户从下拉菜单中选择一种语言时,我希望应用程序的语言环境相应地更改。捕获语言环境并不困难,但是如何在此之后为所有页面设置语言环境。
我在资源包和faces-config.xml中设置了配置
最佳答案
注册自己的ViewHandler
并覆盖其calculateLocale()方法将是一种方法。
自定义ViewHandler
需要在faces-config.xml
文件中指出,例如:
<faces-config version="2.0" xmlns...>
<application>
...
<view-handler>your.package.CustomLocaleViewHandler</view-handler> ...
并且该实现将仅覆盖
calculateLocale()
并将其他方法委托给代理ViewHandler
:public class CustomLocaleViewHandler extends ViewHandler {
private final ViewHandler base;
public CustomLocaleViewHandler(ViewHandler base) {
this.base = base;
}
@Override
public Locale calculateLocale(FacesContext context) {
//... your logic goes here
return locale;
}
@Override
public String calculateRenderKitId(FacesContext context) {
return base.calculateRenderKitId(context);
}
@Override
public UIViewRoot createView(FacesContext context, String viewId) {
return base.createView(context, viewId);
}
... other proxied methods
}