gpt4 book ai didi

java - 如何理解 Spring MVC 工作流?

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:57:20 26 4
gpt4 key购买 nike

我目前想扩展我对 Spring MVC 的了解,所以我正在研究 Spring 发行版中的示例 Web 应用程序。我基本上是在检查 Petclinic 应用程序。

在 GET 方法中,Pet 对象被添加到模型属性中,因此 JSP 可以访问 javabean 属性。我想我明白这一点。

@Controller
@RequestMapping("/addPet.do")
@SessionAttributes("pet")
public class AddPetForm {
@RequestMapping(method = RequestMethod.GET)
public String setupForm(@RequestParam("ownerId") int ownerId, Model model) {
Owner owner = this.clinic.loadOwner(ownerId);
Pet pet = new Pet();
owner.addPet(pet);
model.addAttribute("pet", pet);
return "petForm";
}

@RequestMapping(method = RequestMethod.POST)
public String processSubmit(@ModelAttribute("pet") Pet pet, BindingResult result, SessionStatus status) {
new PetValidator().validate(pet, result);
if (result.hasErrors()) {
return "petForm";
}
else {
this.clinic.storePet(pet);
status.setComplete();
return "redirect:owner.do?ownerId=" + pet.getOwner().getId();
}
}
}

但我无法理解的是在 POST 操作期间。我抬头看着我的 Firebug ,我注意到我的帖子数据只是用户输入的数据,这对我来说没问题。

alt text

但是当我检查 Controller 上的数据时。所有者信息仍然完整。我查看从 JSP 生成的 HTML,但看不到有关 Owner 对象的一些隐藏信息。我不太确定 Spring 在哪里收集有关所有者对象的信息。

这是否意味着 Spring 正在缓存每个线程请求的模型对象?

alt text

这是针对 Spring MVC 2.5 的。

最佳答案

此行为的关键是 @SessionAttributes("pet"),这意味着模型的 pet 属性将保留在 session 中。在 setupForm 中,您执行以下操作:

    Pet pet = new Pet();
owner.addPet(pet);
model.addAttribute("pet", pet);

意思是:创建一个Pet对象,将其添加到请求中指定的主人(@RequestParam("ownerId") int ownerId),大概是这样的设置宠物主人属性。

processSubmit 方法中,您在方法签名中声明了@ModelAttribute("pet") Pet pet,这意味着您想要Pet 您之前存储在 session 中的对象。 Spring 检索此对象,然后将其与 JSP 中设置的任何内容合并。因此有一个填充的所有者 ID。

更多信息在 Spring documentation

关于java - 如何理解 Spring MVC 工作流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4654351/

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