Можно ли включить разметку с пользовательской формой в калитку? - PullRequest
2 голосов
/ 19 октября 2011

Я пытаюсь реализовать форму, которую я могу использовать повторно для добавления или редактирования объекта. Я заметил, что если я определяю класс, расширяющий форму, я должен объявить разметку для всех компонентов формы в HTML страницы, где я создаю экземпляр этой формы.

Я попытался поместить соответствующий HTML-файл с моим пользовательским классом Form в свой пакет, но он не учитывает тот факт, что HTML-код соответствует классу Java.

По сути, я хочу, чтобы форма выглядела точно так же, но чтобы иметь возможность переопределить метод onSubmit формы, чтобы я мог использовать разные значения при вызове для формы setResponsePage.

Ответы [ 2 ]

6 голосов
/ 19 октября 2011

Wicket Form не поддерживает тот же шаблон выравнивания с соответствующей разметкой, что и многие другие классы компонентов калитки.

Когда я хочу сделать что-то подобное, я оборачиваю форму в подкласс Panel, помещаю разметку формы в соответствующую разметку для этого класса и затем могу включить панель на нескольких страницах, не дублируя разметку. .

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

Другая возможность для вашей конкретной цели - передать страницу ответа в качестве параметра при создании формы, а затем, если это единственное отличие, вам не нужно создавать две формы.

2 голосов
/ 19 октября 2011

Просто добавьте к @ прекрасным комментариям DonRoby , вы можете посмотреть на это так:

  • Вы можете предоставить разметку только для тех классов, которые расширяют Page,или WebMarkupContainerWithAssociatedMarkup, например Panel, Border, Fragment.
  • Другие классы, такие как TextField или Form, просто выводят свою разметку, возможно, в зависимости от состоянияНапример, с помощью их методов onComponentTag(), onComponentTagBody() и других.TextField выводит <input ...>, а Form выводит <form ....> _formbody_ </form>.

Как уже указывал Дон, путь состоит в том, чтобы вставить это Form в Panel.Вы всегда можете делегировать Form.onSubmit() пользовательскому методу в обертке Panel и переопределять его при необходимости.

...