【问题标题】:Uncaught TypeError: Object #<Object> has no method 'replace' on primefaces.js未捕获的类型错误:对象 #<Object> 在 primefaces.js 上没有“替换”方法
【发布时间】:2013-05-13 12:09:33
【问题描述】:

我有一个链接可以在 xhtml 中从 lang 1 切换到 lang 2:

<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();
}

总是得到 Uncaught TypeError: Object # has no method 'replace' on primefaces.js

仅当我切换到法语和具有 selectOneMenu、对话框的页面时才会弹出这些问题。

对此表示赞赏。

应用使用 Jsf 2.0、Primefaces 3.5

【问题讨论】:

  • 我还需要保留视图页面的详细信息,这就是我使用处理程序将其设置回上下文的原因。
  • 主要问题似乎在 primefaces js 重新加载时蔓延。我是否需要在 web.xml 中明确提及与 primefaces 相关的内容??
  • 您是否手动包含另一个 jQuery 副本?如果是这样,为什么?

标签: javascript jsf primefaces


【解决方案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>

【讨论】:

  • 不解释,但它是比建议的表格更好的解决方案。
猜你喜欢
  • 1970-01-01
  • 2014-01-08
  • 2013-04-19
  • 2012-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多