我正在将我的应用程序从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来实现它,但它迫使我实现许多方法,我希望使用默认行为。
提前感谢您的帮助。
答案 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.
}
}