3.5.2.1.49. Tree
Компонент Tree
предназначен для отображения иерархической структуры, представленной сущностями, содержащими ссылки на самих себя.
XML-имя компонента: tree
Пример описания компонента Tree
в XML-дескрипторе экрана:
<data readOnly="true">
<collection id="departmentsDc" class="com.company.sales.entity.Department" view="department-view">
<loader id="departmentsDl">
<query>
<![CDATA[select e from sales_Department e]]>
</query>
</loader>
</collection>
</data>
<layout>
<tree id="departmentsTree" dataContainer="departmentsDc" hierarchyProperty="parentDept"/>
</layout>
В атрибуте dataContainer должен быть указан контейнер данных с типом CollectionContainer, а в атрибуте hierarchyProperty
нужно указать имя атрибута сущности, являющегося ссылкой на саму себя.
В атрибуте captionProperty
можно задать имя свойства сущности, отображаемого в дереве. Если этот атрибут не определен, то будет отображаться имя экземпляра сущности.
Метод setItemCaptionProvider()
задает функцию, которая обеспечивает простановку имени атрибута сущности в качестве заголовка для каждого элемента дерева.
Атрибуты выбора Tree
:
-
Атрибут
multiselect
позволяет задать режим множественного выделения элементов дерева. Еслиmultiselect
равенtrue
, то пользователь может выделить несколько элементов с помощью клавиатуры или мыши, удерживая клавиши Ctrl или Shift. По умолчанию режим множественного выделения отключен.
-
selectionMode
- определяет режим выделения строк. Поддерживаются следующие режимы:-
SINGLE
- единичный выбор строки. -
MULTI
- множественный выбор строк как в таблице. -
NONE
- выбор строк отключен.
Выделение строк можно отслеживать с помощью слушателя
SelectionListener
. Источник события выделения можно отследить с помощью метода isUserOriginated().Атрибут
selectionMode
имеет приоритет над устаревшимmultiselect
. -
Метод setItemClickAction()
позволяет задать действие, которое будет выполнено при двойном клике по узлу дерева.
Каждый элемент дерева может иметь значок слева. Создайте реализацию интерфейса ListComponent.IconProvider
в контроллере экрана и установите ее для компонента Tree
:
@Inject
private Tree<Department> tree;
@Subscribe
protected void onInit(InitEvent event) {
tree.setIconProvider(department -> {
if (department.getParentDept() == null) {
return "icons/root.png";
}
return "icons/leaf.png";
});
}
В старых экранах компонент Tree
может быть связан с данными через источник данных вместо более удобного контейнера. В этом случае необъодимо определить вложенный элемент treechildren
, который должен содержать ссылку на источник данных с типом hierarchicalDatasource
в значении атрибута datasource. Определение hierarchicalDatasource
должно включать атрибут hierarchyProperty
- имя атрибута сущности, являющегося ссылкой на саму себя.
- Атрибуты tree
-
caption - captionAsHtml - captionProperty - contextHelpText - contextHelpTextHtmlEnabled - css - dataContainer - description - descriptionAsHtml - enable - box.expandRatio - height - id - multiselect - stylename - tabIndex - visible - width
- Элементы tree
- Атрибуты treechildren
- API