ui: включить включает страницу до события prerender jsf

У меня есть страница test.xhtml, где я определяю событие

<f:metadata>
    <f:event type="preRenderView" listener="bean.setUrl()"/>
</f:metadata>

На странице также есть тег вставки.

<ui:insert name="melcontent">
      <ui:include id="contentscreen" src="bean.url"/>
</ui:insert>

Теперь проблема в том, что я хочу установить это include src page src="/page/somepage.xhtml" динамически в событии prerender, где-то в бэк-компоненте и хочет загрузить тег include из этого бэка-компонента, но перед тем, как prerender вызывает слушателя, include имел был уже казнен еще до предоплаты. Кто-нибудь может предложить способ достичь этого. заранее спасибо.

1 ответ

Решение

Тег ui:include является обработчиком тегов, что означает, что он выполняется во время построения представления вместо времени визуализации представления. Так что preRenderView произойдет позже.

Теги времени сборки - они используются для изменения построения дерева компонентов. Они не будут вносить никаких изменений во время рендеринга.

Время рендеринга - когда представление визуализируется для создания HTML. Это случается позже.

Если вам действительно нужно сделать это с помощью ui:include, вы можете добавить список включений, завернутый в ui: фрагмент с атрибутом рендеринга, поскольку атрибут рендеринга ui: фрагмент будет оцениваться во время рендеринга. Подобно:

<h:panelGroup id="panel">
    <ui:fragment rendered="#{bean.conditionFirstFile}">
        <ui:include src="first.xhtml"/>
    </ui:fragment>    
    <ui:fragment rendered="#{bean.conditionSecond}>
        <ui:include src="second.xhtml"/>
    </ui:fragment>
    ...
</h:panelGroup>
Другие вопросы по тегам