2010-10-04 46 views
4

我有一個應用程序,用戶可以在我的應用程序的歡迎頁面中的區域設置之間動態切換。我發現較早的開發人員(繼承代碼沒有太多文檔)已經覆蓋了ViewHandler的以下三種方法,並告訴我這是動態切換語言環境所必需的...任何幫助都非常感謝JSF應用程序中的動態區域切換?

另外,讓我知道是否有處理這種

public Locale calculateLocale(FacesContext facescontext) 
{ 
    Locale userLocale = LocaleManager.getInstance().getCurrentLocale(); 
    if (userLocale != null) 
    { 
     return userLocale; 
    } 
    else 
    { 
     return delegate.calculateLocale(facescontext); 
    } 
} 

public void renderView(FacesContext facescontext, UIViewRoot uiviewroot) 
     throws IOException, FacesException { 
    uiviewroot.setLocale(LocaleManager.getInstance().getCurrentLocale()); 
    delegate.renderView(facescontext, uiviewroot); 
} 
public UIViewRoot createView(FacesContext facescontext, String s) 
{ 
    UIViewRoot view = delegate.createView(facescontext, s); 
    view.setLocale(LocaleManager.getInstance().getCurrentLocale()); 
    return view; 
} 

回答

8

我的解決方案更好的辦法是:

  • 有一個會話範圍的託管Bean,它擁有Locale實例
  • 爲每個支持的語言以下按鈕(或鏈接):

    <h:commandButton action="#{localeBean.changeLocal}"> 
        <f:setPropertyActionListener target="#{localeBean.selectedLanguage}" 
           value="en" /> 
    </h:commandButton> 
    
  • 設置基礎上,通過語言當前區域(new Locale(lang)

  • 在你的模板(S)
  • 使用<f:view locale="#{localeBean.currentLocale}">
+0

謝謝你的建議。我被告知(在發佈問題之後)如果已經創建了jsf視圖,即使語言環境已被更改,恢復視圖也會以之前創建的相同語言環境呈現CURRENT視圖...您的建議是否處理了該問題? – 2010-10-04 21:54:05

+0

恢復視圖是jsf生命週期中的一個階段,因此每次請求都會調用它。因此,下一個請求(例如重定向之後),您將擁有新的區域設置。 – Bozho 2010-10-05 12:45:09

相關問題