当前位置: 首页 > 面试题库 >

JSF语言切换器和Ajax更新

章琛
2023-03-14
问题内容

这个问题是JSF 2中较早的Languageswitcher实现的后续。

尽管PrimeFaces发布了一些较新的版本,但该问题的实质仍然有效,而我的JSF知识比以前更好了。

总而言之,我只有一个xhtml页面,将其完全合并。

语言切换器是这样的:

<h:form id="selectLanguage" >
    <p:commandLink action="#{languageSwitcher.setLanguage('it')}" rendered="#{languageSwitcher.language!='it'}" >
        <h:graphicImage library ="images" name="it.gif" title="it" />
    </p:commandLink>
    <p:commandLink action="#{languageSwitcher.setLanguage('en')}" rendered="#{languageSwitcher.language!='en'}" >
        <h:graphicImage library ="images" name="en.gif" title="en" />
    </p:commandLink>
</h:form>

我希望在 it 选择时仅 en 显示标志,反之亦然。我希望使用Resource Bundle翻译来更新网页中的所有内容。

特别是,我有一些p:dialogS,其标头属性也需要更新。对话框窗体位于每个对话框中:

<p:dialog header="#{msgs.myHeader}"  ... >
    <h:form .... />
</p:dialog >

页面的其余部分是一个<p:layout>包含一些layoutUnits 的页面。每个都layoutUnit包含一个表单以及其他需要翻译的组件

LanguageSwitcher是一个SessionScoped JSF Managed Bean

我尝试了以下所有方法:

  1. <f:ajax render="@all" />内部p:commandLink括号
  2. update="@all" 里面的属性 p:commandLink
  3. <p:ajax update="@all" />内部p:commandLink括号

不幸的是,它们都不起作用。

我尝试使用@all,尽管我可以插入表单的ID,但数量并不多。问题在于对话框标题没有以这种方式更新。

我正在使用PrimeFaces 3.4.1-Mojarra 2.1.13


问题答案:

update="@all"所有PrimeFaces版本到现在为止(3.4.2)已知在IE失败。与ajax响应一起交付的所有JavaScript代码均未正确初始化。

在PrimeFaces论坛主题中对此进行了讨论,并报告为问题4731。

在修复此问题之前,最好的办法是通过在可能包含update="@all"命令的每个视图上加载以下JavaScript来解决此问题:

var originalPrimeFacesAjaxResponseFunction = PrimeFaces.ajax.AjaxResponse;
PrimeFaces.ajax.AjaxResponse = function(responseXML) {
   var newViewRoot = $(responseXML.documentElement).find("update[id='javax.faces.ViewRoot']").text();

    if (newViewRoot) {
       $('head').html(newViewRoot.substring(newViewRoot.indexOf("<head>") + 6, newViewRoot.indexOf("</head>")));
       $('body').html(newViewRoot.substring(newViewRoot.indexOf("<body>") + 6, newViewRoot.indexOf("</body>")));
    } else {
        originalPrimeFacesAjaxResponseFunction.apply(this, arguments);
    }
};

提供这种样式的JS文件,以强制正确的加载顺序在JS文件<h:outputScript target="head">内部进行<h:body>加载。

<h:body>
    <h:outputScript name="script.js" target="head" />
    ...
</h:body>


 类似资料:
  • 我有一个复杂的jsf页面,其中有一些在PrimeFaces中开发的小部件。到目前为止,应用程序是完全ajaxified的,这意味着没有提交,但是所有的事件和更新都是通过Ajax行为来处理的(这不是必须的,而是一个很好的特性)。我还做了一个来切换语言: 在selectonemenu中有一个ajax更新: 这很好用,是首选的解决方案,因为它是Ajax,但是 已编辑 欢迎任何建议。

  • 本教程旨在指导您在uni-app(小程序,H5,APP(不含NVUE)等)中从0开始,到熟练使用多语言切换功能,在这里,我们使用的是vue-i18n插件,请您务必按照我们提供的步骤,完整的做好每一步的配置。 前言: i18n是一个专门用于处理多语言的插件,其义来自于internationalization(国际化),取其首尾两个字母i和n,中间部分nternationalizatio刚好18个字母

  • 问题: 如何实现实时语言切换? 解法: 首先你必须阅读 模板语言中的i18n支持, 然后尝试下面的代码。 文件: code.py import os import sys import gettext import web # File location directory. rootdir = os.path.abspath(os.path.dirname(__file__)) # i18n

  • App中利用Plist文件进行多语言切换的demo。 1.使用PLIST文件进行创建多国语言,项目中并没有使用NSLocal 2.使用本地存储用户所选择的用户设置,可以用coredata之类。demo中为了演示方便使用NSUserDefaults 进行存储用户设置。 作者说:本demo只是设置多语言的一个小技巧方法,代码比较简单,还希望大家多多补充和反馈:) [Code4App.com]

  • 主要内容:从数组或切片生成新的切片,直接声明新的切片,使用 make() 函数构造切片切片(slice)是对数组的一个连续片段的引用,所以切片是一个引用类型(因此更类似于 C/ C++ 中的数组类型,或者 Python 中的 list 类型),这个片段可以是整个数组,也可以是由起始和终止索引标识的一些项的子集,需要注意的是,终止索引标识的项不包括在切片内。 Go语言中切片的内部结构包含地址、大小和容量,切片一般用于快速地操作一块数据集合,如果将数据集合比作切糕的话,切片就是你要的“

  • 本文向大家介绍android 使用kotlin 实现点击更换全局语言(中日英切换),包括了android 使用kotlin 实现点击更换全局语言(中日英切换)的使用技巧和注意事项,需要的朋友参考一下 > 因为我的工作要用kotlin所以今天在这里给大家总结一下关于全局语言切换的kotlin语言实现实现,很简单,希望在这里可以帮助到有需要的同学,下面简单说一下实现步骤,会把运行截图放在最后< 注:在