2015-03-18 2 views
0

У меня есть два составных компонента с <h:dataTable> внутри, и они отличаются только по содержанию несколькими <h:column>. Каков наилучший способ избежать копирования-пасты с возможностями составных компонентов? Я знаю о тегах, но у меня нет никакого тега в моем проекте. Таким образом, это не решение для меня.Каков наилучший способ использования составных компонентов для столбцов таблицы данных?

ответ

1

Добавить атрибут вашего составного компонента:

<cc:interface> 
    <cc:attribute name="columnType" type="java.lang.String" required="true" /> 
</cc:interface> 

Тогда в реализации

<h:column rendered="#{cc.attrs.columnType eq 'typeAColumns'> 
    #{data.valueForColumnTypeA} 
</h:column> 
<h:column rendered="#{cc.attrs.columnType eq 'typeBColumns'> 
    #{data.valueForColumnTypeB} 
</h:column> 

Вы можете использовать его как

<my:compositeTable columnType="typeAColumns"/> 
<my:compositeTable columnType="typeBColumns"/> 
+0

Да, но тогда я буду смешивать несколько реализаций внутри одного компонента. Сегодня у меня только две реализации, завтра три. Что тогда? Я получу огромный компонент, который будет трудно поддерживать. Это не хорошо. Насколько я понимаю, нет лучшего способа использования составных компонентов для повторного использования dataTable. Я должен использовать теги или визуализированный атрибут или сделать копию. По-моему, это плохо. Надеюсь, что в будущем мы получим что-то от команды JSF. –

Смежные вопросы