gpt4 book ai didi

ajax - JSF 语言切换器和 ajax 更新

转载 作者:行者123 更新时间:2023-12-01 04:40:55 24 4
gpt4 key购买 nike

这个问题是旧Language switcher implementation in JSF 2的后续问题.

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

总而言之,我有一个 xhtml 页面,完全 ajaxified。

语言切换器是这样的:

<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 标志被显示,反之亦然。我希望网页中的所有内容都使用资源包翻译进行更新。

特别是,我有一些 p:dialog S 的头属性也需要更新。对话框表单位于每个对话框内:

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

页面的其余部分是 <p:layout>包含一些布局单元。每个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"直到现在 (3.4.2) 的所有 PrimeFaces 版本都已知在 IE 中失败。随 ajax 响应一起传送的任何 JavaScript 代码都没有正确初始化。

这在 this PrimeFaces forum topic 中讨论并报告为 issue 4731 .

在他们修复它之前,最好的办法是通过在每个 View (可能)包含 update="@all" 的每个 View 上加载以下 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);
}
};

以由 <h:outputScript target="head"> 加载的 JS 文件的形式提供它在<h:body>里面以执行正确的加载顺序。

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

关于ajax - JSF 语言切换器和 ajax 更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13552531/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com