我遇到一种情况,当用户从下拉菜单中选择一种语言时,我希望应用程序的语言环境相应地更改。捕获语言环境并不困难,但是如何在此之后为所有页面设置语言环境。

我在资源包和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

}

09-15 13:20