Для поля формы 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 на эту тему, например...