Несколько <cc: insertChildren /> в одном составном компоненте - PullRequest
1 голос
/ 05 октября 2011

Я пытаюсь сделать составной компонент с объединением автозаполнения и dataTable. Как это:

<util:myCustomComp ...>
    <p:column>#{item.code}</p:column>
    <p:column>#{item.name}</p:column>
</util:myCustomComp>

И в файле CC:

<p:autoComplete ...>
    <cc:insertChildren /> <!-- Show columns only in autocomplete -->
</p:autoComplete>
<p:dataTable ...>
    <cc:insertChildren />
</p:dataTable>

Но второй не рендерится, рендерит только первый и ищет (в автозаполнении или в dataTable).

<p:autoComplete ... />
<p:dataTable ...>
    <cc:insertChildren /> <!-- Show columns in dataTable -->
</p:dataTable>

Ответы [ 2 ]

2 голосов
/ 05 октября 2011

К сожалению, это не сработает, и нет способов декларативно дублировать компоненты.Вместо этого вы можете использовать <ui:include>.

columns.xhtml

<ui:composition ...>
    <p:column>#{item.code}</p:column>
    <p:column>#{item.name}</p:column>
</ui:composition>

Основной вид:

<util:myCustomComp columnsFile="/columns.xhtml" ... />

Составная реализация:

<p:autoComplete ...>
    <ui:include src="#{cc.attrs.columnsFile}" />
</p:autoComplete>
<p:dataTable ...>
    <ui:include src="#{cc.attrs.columnsFile}" />
</p:dataTable>

(заявление об отказе: не проверено, это может нарушить представление bean-объекта bean-объекта, если включено частичное сохранение состояния)

1 голос
/ 05 октября 2011

Вы можете использовать cc: insertChildren в представлении только один раз для каждого составного компонента, в противном случае возникнет исключение дублирующегося идентификатора. К сожалению, нет способа, который мог бы работать: - (.

...