primefaces更新页面的内容

时间:2011-09-04 10:09:47

标签: javascript jquery jsf primefaces facelets

我有一个包含

的页面Create.xhtml
<p:calendar .... />

在另一个页面List.xhtml中,不包含任何<p:calendar/>

使用Primefaces Ajax命令(因此没有任何页面调用/刷新)我调用

<ui:include src="Create.xhtml"/>

(使用<p:ajax />标记中的更新参数。)

显示包含的页面,但<p:calendar/>不起作用,因为页面<head>标记未加载Primefaces日历库。

使<p:calendar/>正常工作的唯一方法是重新加载/刷新整个页面,但由于性能问题,我需要执行ajax请求并仅更新include。

有什么办法吗?像刷新/更新只有头标记?

编辑:Create.xhtml内容位于<ui:component>标记中,List.xhtml内容位于<ui:composition>标记中(使用模板),两个页面都没有任何<html><head>/<h:head><body>/<h:body>标记。所有这些标签都在模板中,由List.xhtml

使用

2 个答案:

答案 0 :(得分:2)

感谢Regis Machado提供解决方案我解决了问题:

在我的模板中,我只是在div面板中插入<h:head>内容:

<!-- by layout="block" the panelGroup is rendered as a div, omitting as span -->
<h:panelGroup id="headPanel" layout="block">
   <h:head>
        <!-- Head Content -->
   </h:head>
</h:panelGroup>

然后在List.xhtml中:

<p:commandLink value="Create" actionListener="#{myBean.toggleInclude}" update=":includePanel,:headPanel"/>

在commandLink update中,将:includePanel放在:headPanel之前,<head>标记会在页面包含后刷新,以便让浏览器渲染器知道要导入的新脚本

顺便说一句: Regis Machado提供的第二个解决方案也可以工作,但是不可管理,首先是因为启动时的loanding脚本(通过包含void日历和文件上载)会大大降低应用程序性能(报告的内容),如果有更多页面的情况包括需要,第二,使代码维护更复杂。

非常感谢你的帮助,希望可以帮助别人!

答案 1 :(得分:1)

尝试使用ajax容器组件,我有与RichFaces 4相同的问题,并将<h:head>放在<a4j:outputPanel>内,当我打开一个模态时,我调用outputPanel id来渲染,然后资源更新..如果我在我的帖子请求中看到<partial-response><changes><update id="pageHead"> ..这不是最好的选择,但现在帮助了我。

我的代码:

<a4j:outputPanel id="pageHead"> <h:head> <title>Portal - <ui:insert name="title" /></title> <ui:include src="../../resources-portal/includes/portal/head.xhtml"/> <ui:insert name="head"/> </h:head> </a4j:outputPanel>

&LT;已编辑&gt;
如果这不起作用,请尝试插入根模板,如果你有一个,你需要的组件,但不渲染它,这也适用于我。

例如:

在我的根模板页面中我放了

  <rich:calendar rendered="false"/>
  <rich:fileUpload rendered="false"/>

这会强制jsf识别和加载组件资源,但不要渲染组件。

&LT; - &gt; 为我的英语而烦恼。