Java 使用spring mvc提交/绑定部分对象
Spring MVC绑定机制功能强大,但我现在面临一个小问题,我想知道如何解决:Java 使用spring mvc提交/绑定部分对象,java,spring-mvc,Java,Spring Mvc,Spring MVC绑定机制功能强大,但我现在面临一个小问题,我想知道如何解决: UserJPA实体,也用于绑定和验证(即贯穿所有层) “编辑配置文件”页面,不应更改密码或某些其他实体属性 我可以想到两种方法: 使用同一对象 使用@InitBinder配置不允许的属性列表 获取目标用户(按id) 然后使用反射实用程序(BeanUtils)将提交的对象复制到目标对象,但忽略null值-即未提交的字段 引入一个具有所需字段子集的新对象,并使用BeanUtils.copyProperties(
JPA实体,也用于绑定和验证(即贯穿所有层)User
- “编辑配置文件”页面,不应更改密码或某些其他实体属性
- 使用
配置不允许的属性列表@InitBinder
- 获取目标用户(按id)
- 然后使用反射实用程序(BeanUtils)将提交的对象复制到目标对象,但忽略
值-即未提交的字段null
BeanUtils.copyProperties(..)
将其合并到实体中备选方案?我刚刚检查了我参与的两个春季项目,在这两个地方都采取了以下方法: 在表单的JSP页面中,ChangePassword字段的名称与用户bean中密码字段的名称不匹配,因此它不会映射到bean。然后在onSubmit方法中,有一个单独的检查是否提交了新密码,如果提交了,则会显式地反映更改 Пззаа,
Vassil我发现,一旦您的web模型开始在功能上偏离业务层,最好使用视图层对象(模型对象)来收集或显示数据 实体:
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语言问题,您可以先从数据库读取对象,然后绑定请求。你可以在网站上找到一个例子
它使用了一个必须由Spring初始化的属性。谢谢,密码更改将通过一个简单的
请求来处理。gatPerameter(..)
,但是用户的属性还有很多,不需要提交/绑定。在这种情况下,我认为您有两个选择:1。以表单的形式输出所有属性的值(可能对某些属性使用隐藏字段)。2.使用InitBinder——毕竟这就是它们的用途。使用隐藏字段意味着用户可以为这些字段提交不同的值,这不是您想要的。这意味着用户输入完整性已被破坏,并通过验证处理为无效。隐藏字段实际上是在一堆框架中实现的“标准”黑客。不过,我仍然更喜欢init binder解决方案。我最终以这种方式实现了它,只是需要注意的是,对于“初始化模型”,我使用了BeanUtils.copyProperties(…)
非常好,我以前也需要类似的东西,但最后总是手动完成,谢谢!