JSF2语言环境处理程序

时间:2011-06-10 10:41:04

标签: localization jsf-2

我正在将我的应用程序从JSF 1.2升级到JSF 2.

我遇到了以下问题。我有语言环境处理程序,它通过检查请求的URL来处理使用的语言环境。

@Configurable
public class MutationViewHandler extends FaceletViewHandler {

@Autowired
private LanguageMutationServiceIface mutationService;

public MutationViewHandler(ViewHandler parent) {
    super(parent);
}

@Override
public Locale calculateLocale(FacesContext context) {
    String mutation = FacesUtil.getRequestParameter("mutation");
    if (mutation == null) {
        return new Locale(mutationService.getDefaultLanguageMutation().getName());
    } else {
        return new Locale(mutation);
    }
}
}

但是在JSF 2中,这个类被弃用,并且在MyFaces中使用时会导致错误(NPE)。我试图使用简单的ViewHandler来实现它,但它迫使我实现许多方法,我希望使用默认行为。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

您需要扩展ViewHandlerWrapper

  

提供ViewHandler的简单实现,可以由希望为现有ViewHandler实例提供专门行为的开发人员进行子类化。所有方法的默认实现是调用包装的ViewHandler

     

用法:扩展此类并覆盖getWrapped()以返回我们正在包装的实例。

所以,你可以做到

public class MyViewHandler extends ViewHandlerWrapper {

    private ViewHandler wrapped;

    public MyViewHandler(ViewHandler wrapped) {
        this.wrapped = wrapped;
    }

    @Override
    public ViewHandler getWrapped() {
        return wrapped;
    }

    @Override
    public Locale calculateLocale(FacesContext context) {
        // Do your thing here.
    }

}