Несколько ‹cc:insertChildren /› в одном составном компоненте

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

<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>

Но второй не отображается, визуализируется только первый и сохраняется (в автозаполнении или в таблице данных).

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

person rogeriolino    schedule 04.10.2011    source источник


Ответы (2)


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

person lu4242    schedule 04.10.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-компонентов с областью видимости, если включено частичное сохранение состояния)

person BalusC    schedule 04.10.2011
comment
Спасибо за помощь. Но создать новый файл для каждого использования этого очень сложно. Теперь я использую дочерние столбцы в dataTable и toString в автозаполнении. - person rogeriolino; 06.10.2011