gpt4 book ai didi

spring-mvc - Spring 中的 @ModelAttribute 和 @SessionAttribute

转载 作者:行者123 更新时间:2023-12-04 13:21:52 33 4
gpt4 key购买 nike

Spring Specification said , @ModelAttribute 将在映射处理程序之前执行,@SessionAttribute 将在 session 中保留模型属性。

考虑以下场景:在调用 Controller 后创建表单 bean,并将其设置为 session 属性。下次调用 MenuController 时,将再次执行 createForm() 并创建另一个新的表单 bean。我的问题是:这个最新创建的表单 bean 会被设置为 session 属性吗?哪个表单 bean 将绑定(bind)到方法 bookList() 中的参数?

希望大家能帮忙。谢谢你。

@Controller
@RequestMapping("/store")
@SessionAttribute("form")
public class MenuController {
@ModelAttribute("form")
public Form createForm() {
return new Form();
}

@RqeustMapping("/book")
public String bookList(@ModelAttribute("form") Form form){
//processing the form
}
}

最佳答案

bookList在给定 session 中第一次调用方法,然后使用 @ModelAttribute('form) 调用方法被调用,返回值(Form 对象)存储在 HttpSession最后是 bookList使用作为参数传递的相同 Form 对象调用方法(从 session 中获得)。
对于同一 HttpSession 内的后续请求, Spring 从 session 中检索相同的 Form 对象并且不调用带有 @ModelAttribute('form') 的方法直到 session 结束。
每次结束后bookList方法调用 Spring 将 Form 对象的更新版本存储在 HttpSession 中.
如果您使用的是 Spring Boot 2.x,您可以调试 DefaultSessionAttributeStore#retrieveAttribute理解这种行为的方法。

关于spring-mvc - Spring 中的 @ModelAttribute 和 @SessionAttribute,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9960337/

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