3.5.5. Действия. Интерфейс Action

Action − интерфейс, абстрагирующий действие (другими словами, некоторую функцию) от визуального компонента. Он особенно полезен в случаях, когда одно и то же действие может быть вызвано из разных визуальных компонентов. Данный интерфейс задает некоторые общие свойства действий, такие как заголовок, горячая клавиша, признаки доступности и видимости, и другими.

Действия могут быть объявлены декларативно, либо программно путем наследования от класса BaseAction. Кроме того, существует набор предоставляемых фреймворком стандартных действий, применимых для работы с таблицами и компонентами выбора.

Визуальные компоненты, связанные с действием, могут быть двух типов:

  • Визуальный компонент, содержащий одно действие, реализует интерфейс Component.ActionOwner. Это Button и LinkButton.

    Связь компонента с действием осуществляется путем вызова метода ActionOwner.setAction() компонента. В этот момент компонент заменяет свои свойства на соответствующие свойства действия (подробнее см. описание компонентов).

  • Визуальный компонент, содержащий несколько действий, реализует интерфейс Component.ActionsHolder. Это Window, Frame, Table и ее наследники, Tree, PopupButton, PickerField, LookupPickerField.

    Действия добавляются компоненту вызовом метода ActionsHolder.addAction(). Реализация этого метода в компоненте проверяет, нет ли уже в нем действия с таким же идентификатором. Если есть, то имеющееся действие будет заменено на новое переданное. Поэтому можно, например, декларировать стандартное действие в дескрипторе экрана, а затем в контроллере создать новое с переопределенными методами и добавить компоненту.