Как заставить калитку проверять отключенные поля на странице прямо перед вызовом - PullRequest
1 голос
/ 02 марта 2012

если мы используем setEnabled (false), скажем, для типа ввода текста, он отключает и не участвует в проверке формы, так как я могу подтвердить это право перед отправкой

Ответы [ 2 ]

4 голосов
/ 02 марта 2012

Как правило, браузеры вообще не передают значение отключенных полей. (В соответствии с обязательным стандартом HTML)

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

  1. Двойное поле: каждое текстовое поле, которое вы собираетесь отключить, должно иметь скрытое "теневое" поле, в которое копируется его значение.
  2. В функции Javascript, которая выполняет отправку, вы можете повторно включить поля только на время отправки. Я еще не пробовал эту опцию, поэтому я не уверен, хорошая ли это идея или действительно ли она работает (хотя и должна).

Отдельная, специфичная для Wicket проблема заключается в том, что даже если браузер отправляет значения, любой компонент Wicket, для которого вызван setEnabled(false), откажется их обрабатывать. Поэтому вам придется расширить двойное поле и на структуру компонентов Wicket, что будет выглядеть не очень хорошо.

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

1 голос
/ 02 марта 2012

Если компонент отключен, он не будет иметь никаких входных данных для проверки.С этого момента я предполагаю, что вы хотите выполнить FormValidator, который включает в себя пользовательский ввод некоторых других компонентов и этот отключенный объект модели TextField.

Если вы не вернете отключенный TextFieldFormValidator.getDependentFormComponents(), FormValidator продолжит выполняться.Учтите, что FormComponent.getConvertedInput() ничего не вернет, потому что нет ввода.Вместо этого вы можете получить объект Modelobject, используя FormComponent.getValue().

...