Для поля формы 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 я привязываю текстовое поле ввода к объекту new Address (результат преобразования), вот с чем мы должны иметь дело. В этом новом объекте 2-го адреса (anotherpackage.new.Address) есть поле, например. "addressLine1", который отличается от "Street1" старого объекта:

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

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


person gene b.    schedule 30.10.2015    source источник
comment
Это не является бизнес-требованием, если только ваши бизнес-пользователи не являются также программистами, и они «требуют» от вас выполнения этой конкретной задачи (что маловероятно). Бизнес-требования имеют форму «как {деловой человек} я хочу {достичь цели, связанной с бизнесом}, чтобы {выгоды}», и они не должны на самом деле говорить о компьютерах и системах. Вы можете иметь в виду, что это архитектурное требование, а это совсем другое.   -  person Software Engineer    schedule 30.10.2015
comment
Я отредактировал исходный пост   -  person gene b.    schedule 30.10.2015
comment
Просто чтобы сообщить об этом, нам удалось найти обходной путь, используя JAXB @XmlJavaTypeAdapter(Address.class). Это предоставило адаптер на стороне объекта домена JAXB. еще раз спасибо   -  person gene b.    schedule 30.10.2015


Ответы (1)


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

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

Обсуждение:

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

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

person Software Engineer    schedule 30.10.2015
comment
Добавил это как последнее предложение в ответ - person Software Engineer; 30.10.2015