Контроллер формы Spring (например, SimpleFormController
или BaseCommandController
) использует команды для передачи данных между HTML-формой и контроллером. Мой вопрос заключается в том, является ли обычной практикой использование вспомогательной модели в качестве самой команды? Или обычно создают отдельную команду с атрибутами, соответствующими атрибутам в базовой модели.
Моя проблема заключается в том, что для использования модели поддержки в качестве команды необходимы редакторы свойств для преобразования нестроковых атрибутов. Представьте себе модель данных со множеством нестроковых строго типизированных типов пользовательских полей. При отправке формы редактор свойств выполняет преобразование до вызова валидатора. Если преобразование типов невозможно (ошибка пользовательского ввода), тогда валидатор никогда не получит подробного сообщения об ошибке. Все, что отображается в HTML-форме - это общее сообщение об ошибке. Смотрите мой связанный вопрос Stackoverflow .
Альтернативой является создание отдельной команды, которая дублирует каждое поле в базовой модели, но в виде строки. Таким образом, валидатор может проверять строковое представление каждого поля. Контроллер onSubmit
отвечает за преобразование текстовой команды в базовую модель. Из моего исследования Spring это, кажется, предполагаемое использование. Я не решаюсь идти по этому пути, потому что для каждой модели данных необходимо создать отдельную команду. Затем добавляется работа, выполняемая в маршале между командой и моделью данных. Намного удобнее иметь форму для непосредственного редактирования модели подложки и использования редакторов свойств для выполнения преобразования. Проблема тогда в проверке.
Поэтому мне любопытно, как другие подходят к вопросу о редактировании моделей на основе форм, содержащих нестандартные настраиваемые поля.