Есть ли разумный способ использовать привязку Spring, когда моя модель может быть представлена ​​простым типом, а не пользовательским компонентом? - PullRequest
1 голос
/ 18 февраля 2011

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

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

К сожалению, я не нашел способа связать эти простые типы и при этом сохранить добавленную стоимость, которую Spring привносит в таблицу.В этом случае я специально хочу использовать его проверку и выставлять пользователю ошибки проверки через тег <form:error>.В итоге я пишу бесполезный класс, подобный следующему:

public class VerificationBean {
    private String pin;

    public String getPin() {
        return pin;
    }

    public void setPin(String pin) {
        this.pin = pin;
    }
}

Я играл с идеей просто использовать обычные теги <input> и вводить пользовательский ввод в мой метод-обработчик с аннотацией @RequestParam, который работает достаточно хорошо, но обработка валидации становится проблематичной, поскольку вам не предоставляется BindingResult или Model для работы, и идея связывания ошибок с помощью <form:error> выходит из окна.Таким образом, создание простого контейнерного класса и использование хорошо понятных механизмов Spring кажется менее компромиссным, чем создание чего-то особенного, но я не могу не чувствовать, что это не может быть настолько необычным сценарием, который существуетДолжен быть лучший способ справиться с этим, чем засорять иерархии классов с bean-компонентами, которые существуют только для привязки данных.Это не ужасное преступление, но вы знаете, какими пуристами мы можем быть.

Кто-нибудь еще сталкивался с подобным сценарием и чувствовал подобное?Если так, что ты в итоге делал?Мы используем Spring 3.0.x здесь.Благодаря.

1 Ответ

0 голосов
/ 20 февраля 2011

Я использовал Spring MVC ~ 5 лет и сталкивался с этим несколько раз. Я не нашел решения, которым я доволен (поэтому я думаю, что я в той же лодке, что и вы).

Мое "решение" в итоге состояло в том, чтобы переехать в Скалу. Scala значительно облегчает создание этих классных маленьких классов

class LameFormInput(@BeanProperty var pin: String = null)

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

...