Spring MVC 表单字段需要自定义绑定
Custom Binding Required for SpringMVC Form Field
我 运行 进入以下 SpringMVC 问题:有一个使用特定地址子对象的域对象,但必须调整 getters/setters 以使用 different 通过转换地址对象。这是架构要求。
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 地址对象(转换的结果),这是我们必须处理的。在这个新的第二个地址对象 (anotherpackage.new.Address
) 中,有一个字段,例如"addressLine1",与旧对象的"Street1":
不同
<form:input path="topObject.address.addressLine1" />
我的问题是 setter、setAddress() 在这种情况下从未被调用以进行绑定(已在调试器中验证)。有什么解决办法吗?
您的选择是:
a) 不要直接绑定到业务对象
b) 配置一个活页夹来转换你的域对象
讨论:
通常在企业 class 软件中,我们不希望直接绑定到业务对象——通常是实体(在 jpa 的上下文中)。这是因为会话处理很麻烦。通常我们针对 DTO 进行编码,当从前端接收到一个时,我们从存储库 (ORM) 层读取适当的对象,更新它,然后再次将其保存回来(我只描述了更新,因为它们是最难的,但类似的模型适用于所有情况)。
但是,spring mvc 绑定程序提供了一种将任何内容绑定到任何内容的方法。它们有点复杂,在这里解释起来会花费太长时间,但是文档在 spring documentation and you want to be looing at converters and a conversion service. There are SO Q/A's on this topic, for example...
我 运行 进入以下 SpringMVC 问题:有一个使用特定地址子对象的域对象,但必须调整 getters/setters 以使用 different 通过转换地址对象。这是架构要求。
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 地址对象(转换的结果),这是我们必须处理的。在这个新的第二个地址对象 (anotherpackage.new.Address
) 中,有一个字段,例如"addressLine1",与旧对象的"Street1":
<form:input path="topObject.address.addressLine1" />
我的问题是 setter、setAddress() 在这种情况下从未被调用以进行绑定(已在调试器中验证)。有什么解决办法吗?
您的选择是:
a) 不要直接绑定到业务对象 b) 配置一个活页夹来转换你的域对象
讨论:
通常在企业 class 软件中,我们不希望直接绑定到业务对象——通常是实体(在 jpa 的上下文中)。这是因为会话处理很麻烦。通常我们针对 DTO 进行编码,当从前端接收到一个时,我们从存储库 (ORM) 层读取适当的对象,更新它,然后再次将其保存回来(我只描述了更新,因为它们是最难的,但类似的模型适用于所有情况)。
但是,spring mvc 绑定程序提供了一种将任何内容绑定到任何内容的方法。它们有点复杂,在这里解释起来会花费太长时间,但是文档在 spring documentation and you want to be looing at converters and a conversion service. There are SO Q/A's on this topic, for example...