Декларативные действия

В XML-дескрипторе экрана для любого компонента, реализующего интерфейс HasActions (dataGrid, entityComboBox, entityPicker, и др.), а также всего экрана, может быть задан набор действий. Это делается в элементе actions, который содержит вложенные элементы action.

В примере ниже набор действий декларируется для компонента dataGrid.

<hbox>
    <button action="departmentsTable.create"/> (3)
    <button action="departmentsTable.edit"/>
    <button action="departmentsTable.sayHello"/>
</hbox>
<dataGrid id="departmentsTable" dataContainer="departmentsDc">
    <actions>
        <action id="create" type="list_create"/> (1)
        <action id="edit" type="list_edit"/>
        <action id="sayHello" text="Say hello" icon="SMILEY_O"/> (2)
    </actions>
    <columns>
        <column property="name"/>
        <column property="hrManager"/>
    </columns>
</dataGrid>
1 Действия list_create and list_edit являются стандартными. Их свойства и поведение определяются их типами.
2 Свойства действия sayHello задаются в данном XML-дескрипторе. Обработчик действия определяется в контроллере экрана.
3 Кнопки, ассоциированные с действиями, получают из действий их свойства: text, icon и пр.

Обработчик действия sayHello задается в контроллере экрана:

@Subscribe("departmentsTable.sayHello")
public void onDepartmentsTableSayHello(final ActionPerformedEvent event) {
    notifications.create("Hello").show();
}

Действие отображается в компоненте dataGrid пунктом контекстного меню:

declarative actions 1

Атрибуты Action

Элемент action может иметь следующие атрибуты:

  • id - идентификатор, должен быть уникален в рамках данного компонента HasActions.

  • type - задает тип действия.

    Если данный атрибут установлен, фреймворк находит класс, имеющий аннотацию @ActionType с указанным в type значением, и использует его для инстанциирования действия. Раздел Стандартные действия описывает типы действий, предоставляемые фреймворком, раздел Собственные типы действий объясняет, как создавать собственные типы действий.

    Если тип не задан, фреймворк создает экземпляр класса BaseAction.

  • text - название действия. Связанная кнопка или пункт контекстного меню будут отображать данный текст.

  • description - описание действия. Связанная кнопка будет использовать данное значение для своего атрибута title.

  • enable - признак доступности действия. Возможные значения: true, false.

  • visible - - признак видимости действия. Возможные значения: true, false.

  • icon - значок действия. Будет отображаться связанной кнопкой.

  • actionVariant - задает вариант действия и вариант связанной кнопки: DEFAULT, PRIMARY, DANGER, SUCCESS.

  • shortcutCombination - комбинация клавиш для вызова действия. Представляет собой комбинацию кодов клавиш и модификаторов, разделенных символом "-". Коды клавиш и модификаторы определены в классе com.vaadin.flow.component.Key. В XML-дескрипторе экрана они должны быть заданы в верхнем регистре. Например:

    <action id="someAction" text="Some action"
            shortcutCombination="CONTROL-ALT-M"/>

Получение ссылок на действия в контроллере

Любое определенное в XML действие можно инжектировать в контроллер, так же как и другие компоненты экрана. Это может понадобиться для программной установки свойств действия. Например:

@ViewComponent
private BaseAction someAction;

@ViewComponent("departmentsTable.sayHello")
private BaseAction departmentsTableSayHello;

@Subscribe
public void onInit(final InitEvent event) {
    someAction.setEnabled(false);
    departmentsTableSayHello.setVariant(ActionVariant.SUCCESS);
}