Spring Boot 如何在Sping Boot 中将Model对象中已经存在的数据从View发送到Controller?

byqmnocz  于 2023-06-22  发布在  Spring
关注(0)|答案(1)|浏览(122)

我有一个Spring的 Boot + Thymeleaf怀疑。假设我有一个控制器,它有两个处理程序方法,比如-

@Controller
public class MyController {
 
    @GetMapping("/test")
    public String test(Model model) {
        model.addAttribute("message", "This is just a message");
        return "test";
    }
 
    @GetMapping("/submit")
    public String submit() {
        //how to access model.getAttribute("message") here?
        return "submit";
    }
 
}

现在,在test()中,我在Model对象中放置了一个键“message”,然后返回test.html。现在,在test.html中,我可以任意使用${message}。现在在test.html中,点击一个按钮,我会重定向到“/submit”,但我也希望将“message”键传递给Model对象中的“/submit”,这样我也可以在submit()中使用相同的键。如何做到这一点?
test()(“message”键放在Model对象中)-> test.html -> submit()(如何在submit()中访问model.getAttribute(“message”)?)

xdnvmnnf

xdnvmnnf1#

你所要求的与你实际上想做的没有多大意义。您应该将Model视为仅在HTML页面呈现期间使用数据填充Thymeleaf模板的对象。
您通常要做的是将数据存储在内存服务或存储库中,或者连接到可以保存该数据的任何类型的数据库。
当您想要编辑数据时,通常会有某种标识符指向存储数据的位置。对于关系数据库,这将是主键。
假设我有一个users表,主键是long。要编辑一个用户,你通常需要一个这样的控制器方法:

@GetMapping("/users/{id}")
public String editUser(@PathVariable("id") long id,
                       Model model) {
  User user = service.getUser(id);
  
  model.addAttribute("formData", FormData.fromUser(user));

  return "users/edit";
}

其中users/edit.html页面将有一个表单来显示要编辑的数据。
表单将使用@PostMapping方法执行POST以将更新的数据发送回控制器,该方法将使用服务来存储更新的数据。
如果你想了解更多关于如何使用Thymeleaf的表单,你可以看看Form handling with Thymeleaf

相关问题