Primefaces обновление <head>содержание страницы - PullRequest
3 голосов
/ 04 сентября 2011

У меня есть страница Create.xhtml, которая содержит

<p:calendar .... />

На другой странице List.xhtml, которая НЕ СОДЕРЖИТ НИКАКИХ <p:calendar/>,

с помощью команды Primefaces Ajax (поэтому БЕЗ КАКОЙ-ЛИБО повторной загрузки / обновления страницы) я вызываю

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

(Использование параметра обновления в теге <p:ajax />).

Отображается включенная страница, но <p:calendar/> не работает, поскольку тег страницы <head> не загружал библиотеку календаря Primefaces.

Единственный способ заставить <p:calendar/> работать должным образом - перезагрузить / обновить всю страницу, но мне нужно выполнить ajax-запрос и обновить только включение, из-за проблем с производительностью.

Есть ли способ сделать это? Как обновить / обновить только заголовок тега?

РЕДАКТИРОВАТЬ: содержимое Create.xhtml находится в теге <ui:component>, а содержимое List.xhtml находится в теге <ui:composition> (использует шаблон), обе страницы НЕ ИМЕЮТ <html>, <head>/<h:head> или <body>/<h:body> тег. Все эти теги находятся в шаблоне, используемом List.xhtml

Ответы [ 2 ]

2 голосов
/ 07 сентября 2011

Благодаря Реджису Мачадо, который предоставил решение, я решил проблему:

В моем шаблоне я просто вставляю содержимое <h:head> в панель div:

<!-- 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, тоже работает, но не поддается управлению, прежде всего потому, что загрузка сценариев при запуске (включая пустой календарь и загрузку файлов) резко снижает производительность приложения (об этом сообщается), если возникает больше случаев страниц включая необходимый, а второй усложняет обслуживание кода.

Большое спасибо за помощь, и надежда может кому-нибудь помочь!

1 голос
/ 07 сентября 2011

Попробуйте использовать компонент контейнера ajax, у меня та же проблема с RichFaces 4, и я помещаю <h:head> в <a4j:outputPanel>, и когда я открываю модальный режим, я вызываю идентификатор outputPanel для рендеринга, затем ресурсы обновляются .. если я вижу в моем сообщении запрос имеет <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>


Если это не сработает, попробуйте добавить в корневой шаблон, если он у вас есть, необходимые компоненты, но не визуализируйте его, для меня это тоже сработало.

например:

в моей корневой шаблонной странице я положил

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

Это заставляет jsf идентифицировать и загружать ресурсы компонентов, но не отображать компоненты.

<-> Прошу прощения за мой английский.

...