我有一个包含
的页面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
答案 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; 为我的英语而烦恼。