代码之家  ›  专栏  ›  技术社区  ›  Bozho

使用Spring MVC提交/绑定部分对象

  •  4
  • Bozho  · 技术社区  · 15 年前

    SpringMVC绑定机制很强大,但我现在面临一个小问题,我想知道如何解决:

    • User JPA实体,用于绑定和验证(即所有层)
    • “编辑配置文件”页,不应更改密码或某些其他实体属性

    我可以想到两种方法:

    1. 使用同一对象

      • 使用 @InitBinder 配置不允许的属性列表
      • 获取目标用户(按ID)
      • 然后使用反射实用程序(beanutils)将提交的对象复制到目标对象,但忽略 null 值-即未提交的字段
    2. 引入一个具有所需字段子集的新对象,并使用 BeanUtils.copyProperties(..) 将其合并到实体。

    选择?

    3 回复  |  直到 12 年前
        1
  •  2
  •   walnutmon    15 年前

    我发现,一旦您的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 ... 
       }
    
    }
    

    现在,所有基于视图的操作都可以将处理交给内部模型对象(如果这样做有意义),否则它可以自己定制它们。当然,问题是你必须重新编写你想要的所有的GET和SETTER(这是一个我必须处理的问题,令人讨厌),不幸的是,这是一个Java语言问题。

        2
  •  1
  •   vstoyanov    15 年前

    我刚刚检查了我去年春天的两个项目,在这两个地方都采取了以下方法:

    在表单的JSP页面中,更改密码字段的名称与用户bean中的密码字段的名称不匹配,因此不会映射到bean。然后,在onsubmit方法中,有一个单独的检查是否提交了新密码,如果提交了新密码,则显式地反映了更改。

    °, 瓦西尔

        3
  •  0
  •   niels    12 年前

    您可以先从数据库读取对象,然后绑定请求。您可以在中找到一个示例 FuWeSta-Sample .

    它使用了 helper-bean 必须由弹簧初始化。