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


person MAK    schedule 15.01.2015    source источник


Ответы (1)


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

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

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

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

<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>
person Inanda Menezes    schedule 15.01.2015