Spring MVC绑定机制很强大,但我现在面临一个小问题,我想知道如何解决:
User
JPA实体,也用于绑定和验证(即遍及所有层)我能想到的两种方式:
使用相同的对象
@InitBinder
配置不允许的属性列表null
值 - 即未提交的字段引入具有所需字段子集的新对象,并使用BeanUtils.copyProperties(..)
将其合并到实体。
替代?
答案 0 :(得分:2)
我发现只要你的网络模型在功能上开始偏离业务层,最好使用视图层对象(模型对象)来收集或显示数据
实体:
public class com.myapp.domain.UserEntity {
}
模型对象:
public class com.myapp.somesite.web.SomeSiteUserModel {
public static SomeSiteUserModel from(UserEntity userEntity) {
... initialize model ...
}
public UserEntity getModelObject() {
... get entity back ...
}
}
现在所有基于视图的操作都可以将处理交给内部模型对象,如果这是有意义的,否则它可以自己定制它们。当然,问题在于你必须重新编写实体所需的所有getter和setter(这是我必须处理的问题,这很烦人),遗憾的是这有点像Java语言问题< / p>
答案 1 :(得分:1)
我刚刚查看了我工作过的最后一个Spring项目中的两个,并且在这两个地方采取了以下方法:
在表单的JSP页面中,更改密码字段的名称与User bean中的密码字段名称不匹配,因此它不会映射到bean。然后在onSubmit方法中单独检查是否已提交新密码,如果已提交,则明确反映更改。
Поздрави, Vassil
答案 2 :(得分:0)
您可以先从数据库中读取对象,然后绑定请求。您可以在FuWeSta-Sample找到一个示例。
它使用helper-bean,必须由Spring初始化。