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>