Лучший способ использовать дополнительные компоненты в поведении калитки

Я создал новый подкласс поведения калитки, который можно прикрепить к компонентам формы. Если для такого компонента возникает ошибка проверки, поведение показывает/скрывает конкретную метку ошибки. Мой код выглядит примерно так:

public MyErrorBehavior(Component errorComponent) { 
  // show/hide errorComponent within onUpdate() or 
  // onError() based on getComponent().isValid()
} 

Мои вопросы: можно ли передать компонент конструктору поведения?

Привет, Андреас


person Andreas    schedule 11.08.2015    source источник


Ответы (2)


Да, в поведении разрешено сохранять ссылки на компоненты, см. пример EqualInputValidator.

Будьте осторожны, удаляя эти компоненты из дерева компонентов: вы должны удалить и поведение, иначе у вас будут оборванные ссылки на компоненты, которые больше не являются отсоединенными.

person svenmeier    schedule 12.08.2015
comment
Спасибо, что указали мне на пример. Что касается висячих ссылок: в моем специальном компоненте FormComponent и связанная с ним метка ошибки всегда удаляются вместе. Но спасибо за подсказку. - person Andreas; 12.08.2015

Нет необходимости сохранять ссылку на компонент, потому что Wicket передаст компонент в методе обратного вызова, например.

@Override 
public void onComponentTag(Component component, ComponentTag tag) 
{ 
  // cast component to FormComponent and make the check here
} 

Таким образом, нет необходимости в очистке, и вы можете добавить один и тот же экземпляр Behavior в более чем один компонент (Form).

person martin-g    schedule 12.08.2015
comment
Это верно для поведения, взаимодействующего с его компонентом размещения. Но в моем случае у меня есть еще один компонент (метка ошибки), который я должен настроить. - person Andreas; 12.08.2015