JSF 2.x: когда тег включается на страницу несколько раз, как использовать другой компонент поддержки для каждого включения?

В JSF 2.2 (включая компоненты CDI) я хочу просмотреть элементы списка. Уже есть файл для отображения одного элемента, скажем, либо файл тега, либо фрагмент, который можно включить через <ui:include>. Каждое представление элемента должно использовать свой собственный "бэк-бин". Как мне это реализовать?

Моя отправная точка:

основной.xhtml:

<t:dataList value="#{bean.elements}"  var="myElement">
    <ui:include src="element.xhtml">
        <ui:param name="elementId" value="#{myElement.id}" />
        <ui:param name="context" value="#{otherBean.context}" />
        <ui:param name="callerClientId"
                  value="#{ ... something like "this.clientId" .. }" />
    </ui:include>
</t:dataList>

элемент.xhtml:

<ui:fragment>
 <!--- 
  each included element.xhtml should get its own elementBean, 
  something like the following must happen:
  "elementBean = elementBeanFactory.getOrCreate(elementId, context, callerClientId)"
 --->
    <h:inputText value="#{elementBean.value}"> ... 
</ui:fragment>

person hwaltz    schedule 13.12.2013    source источник


Ответы (1)


Как насчет:

  1. Инкапсулируйте свой код в виде составного компонента.
  2. Создайте «бины», которые вы хотите использовать, и поместите их в список
  3. Итерация по списку и визуализация пользовательского компонента - передача экземпляра компонента

Разве это не решит проблему?

person Harsha R    schedule 15.12.2013
comment
Вы правы, именно так я решил проблему такого рода с JSF 1.x (конечно, используя <ui.include> вместо составных компонентов). Я просто подумал, что сочетание новых областей видимости JSF и EL 2.2 позволит мне немного разделить классы. Я всегда думал, что родитель bean не должен знать о "бинах", которые используются элементами - аналогично стандартным компонентам JSF, которые я могу использовать, не обращаясь к ним. - person hwaltz; 17.12.2013