2013-03-15 1 views
0
public class LocaleViewHandler extends ViewHandler{ 

    private final ViewHandler base; 

    public LocaleViewHandler(ViewHandler base){ 
     super(); 
     this.base = base; 
    } 
    @Override 
    public Locale calculateLocale(FacesContext context) { 
      Locale locale; 
     HttpSession session = (HttpSession) context.getExternalContext() 
      .getSession(false); 
     if (session != null) { 
      //Return the locale saved by the managed bean earlier 
      locale = (Locale) session.getAttribute("locale"); 
      if (locale == null) { 
       locale= new Locale("en"); 

      } 
      return locale; 
     } 
    return base.calculateLocale(context); 

    } 

    @Override 
    public String calculateRenderKitId(FacesContext arg0) { 
     // TODO Auto-generated method stub 
     return base.calculateRenderKitId(arg0); 
    } 

    @Override 
    public UIViewRoot createView(FacesContext arg0, String arg1) { 
     // TODO Auto-generated method stub 
     return base.createView(arg0, arg1); 
    } 

    @Override 
    public String getActionURL(FacesContext arg0, String arg1) { 
     // TODO Auto-generated method stub 
     return base.getActionURL(arg0, arg1); 
    } 

    @Override 
    public String getResourceURL(FacesContext arg0, String arg1) { 
     // TODO Auto-generated method stub 
     return base.getResourceURL(arg0, arg1); 
    } 

    @Override 
    public void renderView(FacesContext arg0, UIViewRoot arg1) 
      throws IOException, FacesException { 
     // TODO Auto-generated method stub 
     base.renderView(arg0, arg1); 
    } 

    @Override 
    public UIViewRoot restoreView(FacesContext arg0, String arg1) { 
     // TODO Auto-generated method stub 
     return base.restoreView(arg0, arg1); 
    } 

    @Override 
    public void writeState(FacesContext arg0) throws IOException { 
     // TODO Auto-generated method stub 
     base.writeState(arg0); 
    } 

    public ViewHandler getBase() { 
     return base; 
    } 


} 

Я пытаюсь работать над примером интернализации, я написал обработчик вида, как показано выше. У меня есть два языка английского и французского языков. Но после написания этого обработчика. На консоли нет ошибки, но на ней отображается пустая белая страница. Что можно сделать, чтобы увидеть представление.Интернализация с использованием обработчика просмотра отображает пустую страницу

ответ

3

Вы должны продлить ViewHandlerWrapper вместо того, чтобы писать свои собственные ViewHandler.

public class LocaleViewHandler extends ViewHandlerWrapper { 

    private ViewHandler wrapped; 

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

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

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

} 

Unrelated к конкретной проблеме, это не совсем правильный подход. Вы должны просто использовать

<f:view locale="#{localeBean.locale}"> 

вместо этого. См. Также Localization in JSF, how to remember selected locale per session instead of per request/view.

Смежные вопросы