gpt4 book ai didi

session - Spring Framework 3 和 session 属性

转载 作者:行者123 更新时间:2023-12-02 07:03:43 25 4
gpt4 key购买 nike

我有一个表单对象,我将其设置为在 Spring Controller 的 GET 请求处理程序中请求。用户第一次进入页面时,应该创建一个新的表单对象并将其设置为请求。如果用户发送表单,则表单对象将从请求中填充,现在表单对象具有所有用户给定的属性。然后验证表单,如果验证正常,则将表单保存到数据库。如果表单未验证,我想将表单对象保存到 session 中,然后重定向到 GET 请求处理页面。当请求重定向到 GET 处理程序时,它应该检查 session 是否包含表单对象。

我发现Spring中有@SessionAttributes("form")注释,但由于某种原因以下不起作用,因为第一次, session 属性form为空并且给出错误:

org.springframework.web.HttpSessionRequiredException: Session attribute 'form' required - not found in session

这是我的 Controller :

@RequestMapping(value="form", method=RequestMethod.GET)
public ModelAndView viewForm(@ModelAttribute("form") Form form) {
ModelAndView mav = new ModelAndView("form");
if(form == null) form = new Form();
mav.addObject("form", form);
return mav;
}

@RequestMapping(value="form", method=RequestMethod.POST)
@Transactional(readOnly = true)
public ModelAndView saveForm(@ModelAttribute("form") Form form) {
FormUtils.populate(form, request);
if(form.validate())
{
formDao.save();
}
else
{
return viewForm(form);
}
return null;
}

最佳答案

如果 Controller 第一次调用,即使将 @SessionAttributes({"form"}) 添加到类中,它也会抛出异常。因此添加以下 populateForm 方法将解决此问题。

@SessionAttributes({"form"})
@Controller
public class MyController {

@ModelAttribute("form")
public Form populateForm() {
return new Form(); // populates form for the first time if its null
}

@RequestMapping(value="form", method=RequestMethod.GET)
public ModelAndView viewForm(@ModelAttribute("form") Form form) {
ModelAndView mav = new ModelAndView("form");
if(form == null) form = new Form();
mav.addObject("form", form);
return mav;
}

@RequestMapping(value="form", method=RequestMethod.POST)
@Transactional(readOnly = true)
public ModelAndView saveForm(@ModelAttribute("form") Form form) {
// ..etc etc
}
}

关于session - Spring Framework 3 和 session 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2757198/

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