使用spring mvc提交/绑定部分对象
Spring MVC绑定机制很强大,但我现在面临一个琐碎的问题,我想知道如何解决:
-
User
JPA实体,也用于绑定和validation(即在所有层中) - “编辑个人资料”页面,不应该更改密码或其他一些实体属性
我能想到的两种方式:
-
使用相同的对象
- 使用
@InitBinder
配置不允许的属性列表 - 获取目标用户(通过id)
- 然后使用reflection实用程序(BeanUtils)将提交的对象复制到目标对象,但忽略
null
值 – 即未提交的字段
- 使用
-
引入具有所需字段子集的新对象,并使用
BeanUtils.copyProperties(..)
将其合并到实体。
备择方案?
我发现,只要您的Web模型在function上开始偏离您的业务层,最好使用视图层对象(模型对象)来收集或显示数据
实体:
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项目中的两个,并且在两个地方都采用了以下方法:
在表单的JSP页面中,更改密码字段的名称与User bean中的密码字段的名称不匹配,因此它不会映射到bean。 然后在onSubmit方法中单独检查是否已提交新密码,如果已提交,则显式反映更改。
Поздрави,Vassil
您可以先从数据库中读取对象,然后绑定请求。 你可以在FuWeSta-Sample找到一个例子。
它使用一个必须由Spring初始化的辅助bean 。
- 无法提交JPA事务 – RollbackException:事务标记为rollbackOnly
- 从XPath表达式填充XML模板文件?
- 我的JBoss服务器在Linux上遇到100%的SYS CPU; 什么可以导致这个?
- 是否有任何框架用于处理swing应用程序中的数据库请求?
- Spring:缺少JPA Metamodel
- 为什么java.util.Arraylist#clear以OpenJDK的方式实现?
- MongoDb在其java驱动程序中的$ set等价物
- Mule – 如何在Java Component中访问流名称?
- Hibernate使用嵌入的ElementCollection抛出ConcurrentModificationException