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
到来时,会话中存储的对象将使用表单中的输入值进行更新。 - 最终持久化
Visit
,status.setComplete()
将删除会话属性。
如果没有@SesssionAttributes
,当POST
到来时,将使用表单输入值重新创建Visit
。
在jsp上,你必须使用标签弹出form标签并将每个变量绑定到modal属性,并且还必须在form标签中指定modalattribute名称。 标签参考
- 为什么我们应该在线程中使用Join?
- JSP如何管理welcome-file-list?
- 使用包含$$字符的SQLExec执行文件
- Java collection / map apply方法等效吗?
- 多个数据库的事务管理使用Spring和Hibernate
- NoSuchMethodError:org.apache.http.conn.scheme.Scheme。(Ljava / lang / String; ILorg / apache / http / conn / scheme / SchemeSocketFactory;)V
- JavaFX 8对话框内部元素的本地化
- Spring Generic Dao类名
- 如何在Swing中分析EDT?