gpt4 book ai didi

Spring MVC : Binding complex Objects to UI

转载 作者:行者123 更新时间:2023-12-02 11:52:36 24 4
gpt4 key购买 nike

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

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

地址对象。

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

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

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

其次:通过隐藏字段方法,我没有得到 Address 对象,我得到的是 null

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

其中 user 是我的模式属性。

我不知道,可能我对Spring MVC的理解有差距。对于 UI 上的绑定(bind)对象,我们是否总是需要创建新实例?如果是嵌套的,我们如何将嵌套对象(地址)返回到绑定(bind)的模态属性中?

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

最佳答案

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

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

等等。

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

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

例如:

@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
}

您不可能只处理客户端所需的属性,并将其与同一现有对象合并。

关于 Spring MVC : Binding complex Objects to UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16895406/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com