Разрешение компонентов Facelets во время выполнения - PullRequest
1 голос
/ 20 июля 2009

знаете ли вы, как выбрать другой компонент Facelets во время выполнения?

У меня есть код, похожий на этот:

<s:fragment rendered="#{r== 'case1'}">
     <div>
           <ui:include src="case1.xhtml" />
     </div>
 </s:fragment>
 <s:fragment rendered="#{r== 'case2'}">
     <div>
            <ui:include src="case2.xhtml" />
     </div>
 </s:fragment>

Я бы хотел написать

<ui:include src="#{r}.xhtml" />

Спасибо.

Ответы [ 3 ]

1 голос
/ 20 июля 2009

Ваше решение должно работать нормально - атрибут src может быть литералом или выражением EL. Возможно, вы захотите заставить выражение использовать свойство управляемого компонента или разрешить его с помощью функции . Таким образом, вы можете гарантировать, что он никогда не будет нулевым (вы можете вернуть ссылку на пустую страницу, если она была). Вы, вероятно, получите ошибку 404, если # {r} преобразуется в ноль.

<ui:include src="#{myfn:resolveNotNull(r, 'pageIfRIsNull')}.xhtml" />
0 голосов
/ 23 июля 2009

Возможно выборочное использование ui: include с другими компонентами JSF. Пример:

<h:panelGroup rendered="#{!menuMBean.passwordResetRequired}">
    <ui:include src="homeNormal.xhtml" />
</h:panelGroup>
0 голосов
/ 20 июля 2009

Не уверен. Альтернативой может быть использование шаблона с ui: insert, а затем указание на case1 или case2, которые используют ui: define программно.

...