Для поля формы SpringMVC требуется пользовательская привязка

Я столкнулся со следующей проблемой SpringMVC: существует объект домена, который использует определенный подобъект Address, но методы получения / установки должны быть настроены для использования другого объекта Address посредством преобразования. Это архитектурное требование.

public class DomainObj {
    protected DomainObj.Address address;

    public anotherpackage.new.Address getAddress()
    {
       return convertFrom(address);
    }

    public void setAddress (anotherpackage.new.Address value)
    {
        this.address = convertTo(value);
    }

}

// Internal Address object, old, #1
public static class Address {
     protected String street1;
     protected String street2;
     // etc., getters/setters
}

Теперь в JSP я связываю поле ввода текста с новым объектом Address (результатом преобразований), с которым нам приходится иметь дело. В этом новом 2-м объекте адреса (anotherpackage.new.Address), есть поле, например, "addressLine1", которое отличается от "Street1" старого объекта:

<form:input path="topObject.address.addressLine1" />

Моя проблема заключается в том, что метод setAddress() никогда не вызывается в этом случае для привязки (проверено в отладчике). Какие-нибудь решения для этого?

1 ответ

Решение

Ваши варианты:

а) не привязывать напрямую к бизнес-объекту б) настроить связыватель для выполнения преобразования в объект вашего домена

Обсуждение:

Обычно в программном обеспечении корпоративного класса мы не хотим связываться напрямую с бизнес-объектами, которые обычно являются сущностями (в контексте jpa). Это связано с тем, что обработка сеанса - это трудная задача. Обычно мы кодируем против DTO, и когда один получен от внешнего интерфейса, мы читаем соответствующий объект из уровня хранилища (ORM), обновляем его и сохраняем его снова (я описал обновления только потому, что они самые сложные, но похожая модель работает на все).

Тем не менее, пружинные связующие mvc предлагают способ связывания чего угодно с чем угодно. Они немного сложны, и объяснение здесь займет слишком много времени, но документы приведены в весенней документации, и вы захотите поработать с конвертерами и сервисом конвертации. Есть SO Q/A на эту тему, например...

Другие вопросы по тегам