gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 06:58:33 38 4
gpt4 key购买 nike

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

似乎表单映射到实体 1:1 正确吗?是否有任何其他配置必须完成,或者 spring 只知道所有表单输入映射到实体,因为这是在 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存储在 session 中。
  • 当后续POST来,存储在 session 中的对象将使用表单中的输入值进行更新。
  • Visit终于坚持了,status.setComplete()删除 session 属性。

  • @SesssionAttributes , VisitPOST 时,将使用表单输入值重新创建来了。

    关于java - Spring 表单处理,将实体映射到表单输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2232095/

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