2013-05-13 57 views
0

我有一個鏈接到在XHTML切換從郎1至郎2 '代替':未捕獲的類型錯誤:對象#<Object>沒有方法上primefaces.js

<p:commandLink value="#{msgs['home.french']}" id="frenchLink" 
    rendered="#{mainBean.changeLanguage.getLanguage() ne 'fr'}"  
    actionListener="#{mainBean.refreshPage}" ajax="false"> 
    <f:param name="selectedLanguage" value="fr"/> 
</p:commandLink> 

<p:commandLink value="#{msgs['home.english']}" id="englishLink" r 
    endered="#{mainBean.changeLanguage.getLanguage() ne 'en'}" actionListener="#{mainBean.refreshPage}" ajax="false"> 
    <f:param name="selectedLanguage" value="en"/> 
</p:commandLink> 

和mainBean,

public void refreshPage(ActionEvent event){ 
     FacesContext context = FacesContext.getCurrentInstance(); 
     String language = context.getExternalContext().getRequestParameterMap().get("selectedLanguage"); 
     changeLanguage = new ChangeLanguage(); 
     ChangeLanguage.setLanguage(language); 
     String viewId = context.getViewRoot().getViewId(); 
     ViewHandler handler = context.getApplication().getViewHandler(); 
     UIViewRoot root = handler.createView(context, viewId); 
     root.setViewId(viewId); 
     context.setViewRoot(root); 
     context.renderResponse(); 
} 

始終得到遺漏的類型錯誤:對象#有沒有方法對primefaces.js

「取代」這些問題僅彈出當我切換到法國和日e頁面有selectOneMenu,對話框。

對此讚賞的任何指針。

應用程序使用JSF 2.0,Primefaces 3.5

+0

我需要保留視圖頁面細節爲好,這就是爲什麼我使用處理程序來設置回上下文。 – techie2k 2013-05-13 12:24:51

+0

主要問題似乎在primefaces js重新加載蠕變。我是否需要在web.xml中明確提及與primefaces相關的內容? – techie2k 2013-05-13 13:06:53

+0

你是否手動包含jQuery的另一個副本?如果是這樣,爲什麼呢? – BalusC 2013-05-14 11:36:04

回答

-1

定義默認語言侑faces-config.xml中

<application> 
     <locale-config> 
      <default-locale>en</default-locale> 
     </locale-config> 
</application> 

建議您的bean是@SessionScoped,則可以考慮創建一個bean只是爲了控制位置的系統。

在你的Bean中創建這個屬性。

private static Map<String,Locale> countries; 
    static{ 
     countries = new HashMap<String,Locale>(); 
     countries.put("fr", Locale.FRANCE); 
     countries.put("en", Locale.ENGLISH); 
    } 

添加方法來更改語言。

public void changeLanguage(){ 
     FacesContext context = FacesContext.getCurrentInstance(); 
     String language = context.getExternalContext().getRequestParameterMap().get("selectedLanguage"); 
     context.getViewRoot().setLocale(countries.get(language)); 
} 

在您看來(XHTML):

<p:commandLink value="#{msgs['home.french']}" id="frenchLink" 
    rendered="#{mainBean.changeLanguage.getLanguage() ne 'fr'}"  
    actionListener="#{mainBean.changeLanguage}" ajax="false" 
    oncomplete="javascript:location.reload(true)"> 
    <f:param name="selectedLanguage" value="fr"/> 
</p:commandLink> 

<p:commandLink value="#{msgs['home.english']}" id="englishLink" 
    rendered="#{mainBean.changeLanguage.getLanguage() ne 'en'}" actionListener="#{mainBean.changeLanguage}" ajax="false" 
    oncomplete="javascript:location.reload(true)"> 
    <f:param name="selectedLanguage" value="en"/> 
</p:commandLink> 
+0

這究竟如何解釋OP的具體JS錯誤? – BalusC 2013-05-14 11:35:34

+0

沒有解釋,但它是比所提議的形式更好的解決方案。 – 2013-05-14 20:50:28

相關問題