Калитка: Может ли Панель или Компонент реагировать на отправку формы без какого-либо стандартного кода? - PullRequest
4 голосов
/ 02 июня 2010

Я сейчас оцениваю Wicket и пытаюсь выяснить, как все работает.

У меня есть вопрос относительно формы отправки и панелей (или других компонентов). Представьте себе пользовательскую панель калитки, которая содержит текстовое поле и выполняет проверку по мере ввода текста с помощью ajax. Эта панель добавлена ​​в форму. Как Panel может реагировать на отправку формы (скажем, потому что javascript / ajax недоступен)?

В настоящее время мне известно только об одном решении: вызове метода панели внутри метода Form onSubmit (). Но это не похоже на подход, который можно использовать повторно, потому что я должен добавить шаблонный код к onSubmit () каждой формы, содержащей панель (и каждый разработчик, использующий панель, должен это знать).

Итак, вот мой вопрос: есть ли способ, которым Panel / Компонент может каким-либо образом «обнаружить» отправку формы? Или кроме этого есть другое решение?

Спасибо.

Ответы [ 6 ]

6 голосов
/ 13 июля 2010

Сделайте так, чтобы ваши панели реализовали org.apache.wicket.markup.html.form.IFormModelUpdateListener, и метод updateModel() должен вызываться, когда содержащая форма отправлена ​​и прошла проверку.

В блоге Wicket In Action .

есть хороший пример использования кода одним из авторов калитки.
1 голос
/ 08 июня 2010

Ну, вы можете просто сделать следующее:

Panel{
Form{
  onSubmit(){
    Panel.this.onSubmit();
  }
}

protected void onSubmit(){}

}

...

Это означает, что любая панель, которая расширяет вашу панель, должна только переопределять onSubmit, и форма, независимо от того, что находится в html, будет вызывать этот метод. Таким образом, вы можете расширить панель и переопределить только один метод для каждой формы.

0 голосов
/ 10 июля 2013

Реализация IFormSubmitListner и IFormModelUpdateListener должна вызывать соответствующие методы во время отправки формы.

Однако, если вы хотите выполнить некоторую обработку после отправки формы, я боюсь, что у вас нет другого выбора, кроме как самостоятельно написать какой-нибудь шаблонный код.

0 голосов
/ 12 июля 2010

что вы подразумеваете под "реагировать"? Я только недавно начал с Wicket, но FWIK, форма отправки обновляет модель компонента, а затем он вызывает onSubmit(), который вы можете переопределить, чтобы предпринять специальные действия помимо этого. См. «Калитка в действии», глава 6.

После этого страница (и ее компоненты) перерисовывается с использованием обновленной модели, поэтому, по сути, они действительно "реагируют" на отправку с помощью всего лишь нескольких строк кода.

Для вашего упомянутого случая с Компонентом в Форме посмотрите на CompoundPropertyModel.

0 голосов
/ 29 июня 2010

У меня была бы форма внутри этой панели. Таким образом, вы можете повторно использовать эту панель без внешней формы. Так как формы не могут быть вложены друг в друга в HTML, Wicket прозрачно поменяет внутреннюю форму (и) на 's', но убедится, что каждая из внутренних форм принимает участие в обработке формы (проверка, ..).

Вы можете переопределить функцию OnSubmit () формы в вашей панели. Калитка позвонит вам за вас.

0 голосов
/ 02 июня 2010

Что касается компонентов формы, платформа обрабатывает их для вас прозрачно. Формы знают о любых дочерних компонентах формы, даже если они не были добавлены непосредственно в родительскую форму.

...