3.5.4.2.2. Стандартные действия поля выбора
В платформе определен набор стандартных действий для компонентов выбора PickerField, LookupPickerField и SearchPickerField.
Пример использования стандартных действий в компоненте выбора:
<pickerField id="userPickerField" dataContainer="employeeDc" property="user">
<actions>
<action id="lookup" type="picker_lookup"/>
<action id="open" type="picker_open"/>
<action id="clear" type="picker_clear"/>
</actions>
</pickerField>
Стандартные действия для компонентов выбора включают в себя следующие типы:
-
picker_lookup
- действие, определяемое классомcom.haulmont.cuba.gui.actions.picker.LookupAction
. It is designed to select an entity instance from a lookup screen and set it to the picker field. Предназначено для выбора экземпляра сущности в отдельном экране выбора и установки его в качестве значения компонента. -
picker_open
- действие, определяемое классомcom.haulmont.cuba.gui.actions.picker.OpenAction
. Предназначено для открытия экрана редактирования экземпляра сущности, являющегося текущим значением компонента. -
picker_clear
- действие, определяемое классомcom.haulmont.cuba.gui.actions.picker.ClearAction
. Предназначено для очистки (то есть установки вnull
) текущего значения компонента.
Для основных параметров стандартных действий определены значения по умолчанию: заголовки, значки, горячие клавиши, а также стандартное поведение при вызове действия. Вы можете передать свои собственные значения основных параметров декларативно в XML так же, как и для любого другого действия. Например, можно установить для действия другой значок:
<action id="open" type="picker_open" icon="USER"/>
Для того чтобы изменить стандартное поведение действия, необходимо подписаться на событие ActionPerformedEvent
для этого действия в контроллере экрана. Код стандартного действия не будет выполняться, если для него определён альтернативный action listener. По сути, обработчик события ActionPerformedEvent
переопределяет стандартное поведение действия.
В следующем примере мы переопределяем стандартное поведение действия picker_lookup
, чтобы выбирать экземпляр сущности User
в конкретном экране, открываемом в режиме модального диалога:
public class CustomerBrowse extends StandardLookup<Customer> {
@Inject
private ScreenBuilders screenBuilders;
@Inject
private PickerField<User> userPickerField;
@Subscribe("userPickerField.lookup")
protected void onUserPickerFieldLookupActionPerformed(Action.ActionPerformedEvent event) {
screenBuilders.lookup(User.class, this)
.withField(userPickerField)
.withScreenClass(UserBrowser.class) // specific lookup screen
.withLaunchMode(OpenMode.DIALOG) // open as modal dialog
.build()
.show();
}
Более подробно о переопределении действий см. в описании бина ScreenBuilders.