Связывание формы SpringMVC с командным объектом, который является интерфейсом - PullRequest
1 голос
/ 10 сентября 2010

Я изучаю SpringMVC 2, и у меня есть форма, которую мне нужно привязать к объекту (команда). Но что, если мне нужно, чтобы этот объект команды был интерфейсом, чтобы я мог использовать различные реализации для объекта (конечно, все реализации будут иметь одинаковые поля).

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

Или просто скажите мне, каковы лучшие весенние практики для такого потока: FORM -> Do Business Logic -> Сохранить в БД

public  class OpenAccountControllerSpring2
extends SimpleFormController {

private ClientDao clientDao;
private Account account;

public OpenAccountControllerSpring2() {
    setCommandClass( // dont know what to write here);
    setCommandName("newAccount");


}


protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response,
        Object command, BindException bindExp)
    throws Exception {
    try {
                    //here i just want to create a new Account, add it to a Client (Interface), then transform the Client into a database-bean and save it.

        int client_id = Integer.parseInt(request.getParameter("clientId"));
        Account account = (Account) command;
        Client client = Transformer.toBusinessHeavy(clientDao.getClient(client_id));
        client.addAccount(account);
        clientDao.updateClient(Transformer.toEntity(client));
    } catch (Exception err) {
        return new ModelAndView(this.getFormView());
    }

    return new ModelAndView(this.getSuccessView());
}

public void setClientDao(ClientDao dao) {
    this.clientDao = dao;
}


public void setAccount(Account account) {
    this.account = account;
}

}

Ответы [ 3 ]

2 голосов
/ 12 сентября 2010

Вы должны обязательно пропустить Spring 2 MVC и перейти прямо к Spring 3 MVC.Это важный эволюционный скачок вперед, который избавит вас от многих проблем.Тем не менее, вы все равно столкнетесь с той же проблемой, пытаясь сделать то, что вы хотите сделать.Spring должен иметь возможность создавать экземпляр объекта команды формы, как сказано в исключении, которое вы получаете.Он не может создать экземпляр интерфейса, как он говорит.Вам придется попробовать другой подход, который, вероятно, потребует больше работы с вашей стороны и меньше помощи со стороны Spring MVC.Вы можете просто работать со значениями параметров запроса напрямую и не использовать объект команды.Вам нужно будет вручную связать параметры с правильным экземпляром подкласса.Или вместо этого вы можете попробовать использовать неабстрактный базовый класс для своих подклассов.Таким образом, вы можете указать этот класс как объект команды, а Spring может создать его экземпляр и привязать к нему значения.Вы могли бы сделать нечто подобное, если бы у вас был отдельный класс, который моделирует ваши формы и отсутствует в существующей иерархии классов.Вы должны будете перевести это в свои классы, все же.Вы также можете проверить свою объектную модель и убедиться, что вы действительно правильно моделируете вещи.Как правило, если вы делаете что-то необычное, что стандартные инструменты не поддерживают, вы, вероятно, уходите на плохую территорию.

0 голосов
/ 12 сентября 2010

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

0 голосов
/ 10 сентября 2010

Почему вы изучаете Spring MVC 2 (большая часть которого устарела), а не Spring MVC 3? Новые контроллеры, управляемые аннотациями, с которыми намного легче работать, и обеспечивают гораздо большую гибкость при написании ваших контроллеров.

Если вас интересует Spring MVC 3, здесь - это ряд примеров, которые я написал, которые могут быть полезны.

...