9

我有我的用户对象,我正在尝试使用 spring MVC 绑定到 UI。用户对象中有另一个对象地址。

public class User {
    String firstName;
    String lastName;
    String userName;
    Address address;
}

地址对象。

public class Address {
    String street;
    String House;
    String country;
}

当我将用户对象绑定到 UI 说编辑用户功能时,我只想保留名字和姓氏。

现在我的第一个问题是,如果我不将用户的其余属性保留为隐藏字段,我将这些值设为空。这意味着 UI 上的绑定对象是 User 对象的新实例。我不能在同一个用户对象上工作并将其绑定到 UI 上并仅获取具有旧值的更新值吗?

其次:通过隐藏字段方法,我没有返回 Address 对象,为此我得到了 null

<form:hidden path="user.address" />

其中 user 是我的模态属性。

我不知道,我对 Spring MVC 的理解可能存在差距。对于 UI 上的绑定对象,我们是否总是必须创建新实例?如果嵌套,我们如何在绑定的模式属性中获取嵌套对象(地址)?

一旦选项我猜是使用活页夹。但据我了解,binder 也会使用 id 获取对象?请提供解决方法,我可以在其中保存查询以取回该对象

4

1 回答 1

14

要取回您的Address对象,您需要列出每个单独的属性:例如:

<form:hidden path="user.address.street" />
<form:hidden path="user.address.country" />

等等。

现在,您绑定到 UI 的对象是您从控制器传递的对象。我假设当表单被提交时,您希望将User对象作为@ModelAttribute. 在这种情况下,您有两个选择:第一个是您需要User在客户端列出对象的所有属性(作为隐藏对象或作为可见表单元素)。

第二个选项是:您只在客户端显示所需的属性,而不是将所有其他属性列为隐藏字段,您只将id实例User的属性保留为隐藏字段。现在,当您在提交表单时收到此@ModelAttribute信息时,您可以使用 . 从数据库中加载整个对象,id并在调用update.

例如:

@RequestMapping("updateUser.do")
public String updateUser(@ModelAttribute User user, ... /* rest of the args */) {
    // ... some other code
    User existingUser = userService.findById(user.getId());
    existingUser.setFirstName(user.getFirstName());
    existingUser.setLasstName(user.getLastName());

    userService.update(existingUser);
    // ... rest of the code
}

您无法仅在客户端处理所需的属性,并将其与相同的现有对象合并。

于 2013-06-03T12:18:58.583 回答