Spring表单处理,将实体映射到表单输入

只需查看petclinic示例应用程序,并尝试学习表单处理。

似乎表单映射到实体1:1正确吗? 是否有任何其他配置需要完成,或者只是知道所有表单输入都映射到实体,因为这是在GET请求中添加到模型的内容?

@Controller @RequestMapping("/owners/*/pets/{petId}/visits/new") @SessionAttributes("visit") public class AddVisitForm { private final Clinic clinic; @Autowired public AddVisitForm(Clinic clinic) { this.clinic = clinic; } @InitBinder public void setAllowedFields(WebDataBinder dataBinder) { dataBinder.setDisallowedFields("id"); } @RequestMapping(method = RequestMethod.GET) public String setupForm(@PathVariable("petId") int petId, Model model) { Pet pet = this.clinic.loadPet(petId); Visit visit = new Visit(); pet.addVisit(visit); model.addAttribute("visit", visit); return "pets/visitForm"; } @RequestMapping(method = RequestMethod.POST) public String processSubmit(@ModelAttribute("visit") Visit visit, BindingResult result, SessionStatus status) { new VisitValidator().validate(visit, result); if (result.hasErrors()) { return "pets/visitForm"; } else { this.clinic.storeVisit(visit); status.setComplete(); return "redirect:/owners/" + visit.getPet().getOwner().getId(); } } } 

注意类上的@SessionAttributes注释:

  • 当原始GET请求到来时,新创建的Visit将存储在会话中。
  • 当后续POST到来时,会话中存储的对象将使用表单中的输入值进行更新。
  • 最终持久化Visitstatus.setComplete()将删除会话属性。

如果没有@SesssionAttributes ,当POST到来时,将使用表单输入值重新创建Visit

在jsp上,你必须使用标签弹出form标签并将每个变量绑定到modal属性,并且还必须在form标签中指定modalattribute名称。 标签参考