更新对象时,会将其作为模型属性发送到视图。但是,当视图返回时,它不带_id(一个新对象)。 MongoDB继续创建一个新对象,而不是更新现有对象。为了避免这种情况,我在视图中将对象的ID作为隐藏输入包括在内,但这感觉不对。还有另一种方法可以实现这一目标,一种更“专业”的方法吗?
@Controller
@RequestMapping("users")
public class UserController {
@Autowired
private UserRepository userRepository;
@GetMapping(value = "/save")
public String saveUserForm(@RequestParam("id") String id, Model model)
{
User user = userRepository.findById(id).get();
model.addAttribute("user", user);
return "saveUser";
}
@PostMapping(value = "/save")
public String saveUser(@ModelAttribute("user") User user)
{
userRepository.save(user);
return "redirect:/users";
}
}
**********************saveUser.html***************************
...
<form th:method="POST" th:modelAttribute="user" th:action="@{/users/save}" th:id="saveUserForm">
<input type="hidden" name ="userId" th:value="${user.userId}"/>
<label for="name">Name: </label>
<input type="text" name="name" th:value="${user.name}"/>
<br />
<label for="creationDate">Creation: </label>
<input type="date" name="creationDate" th:field="${user.creationDate}"/>
<br />
<input type="submit" value="Update" />
</form>
...
答案 0 :(得分:0)
您可以在控制器上使用@SessionAttributes("user")
。在此控制器期间,它将user
对象临时存储在会话中,因此您不必包括隐藏的属性。