Платформа Spring 3 и атрибуты сессии

У меня есть объект формы, который я установил для запроса в, ПОЛУЧАЮТ обработчик запросов в моем контроллере Spring. Новый пользователь входит в страницу, новый объект формы должен быть сделан и установлен запросить. Если пользователь отправляет форму, то объект формы заполняется от запроса, и теперь объект формы имеет всего пользователя givern атрибуты. Затем форма проверена и если проверка в порядке, то сформируйтесь, сохраняется к базе данных. Если форма не проверена, я хочу сохранить объект формы к сессии и затем перенаправить для ПОЛУЧЕНИЯ страницы обработки запроса. Когда запрос перенаправляется для ПОЛУЧЕНИЯ обработчика, затем он должен проверить, содержит ли сессия объект формы.

Я выяснил, что существует @SessionAttributes ("форма") аннотация в Spring, но по некоторым причинам следующее не работает, потому что в первый раз, форма атрибута сессии является пустой, и это дает ошибку:

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

Вот мой контроллер:

@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;
}
22
задан skaffman 3 May 2010 в 10:43
поделиться

1 ответ

Задача @SessionAttribute - привязать существующий объект модели к сеансу. Если он еще не существует, вам нужно его определить. На мой взгляд, это излишне сбивает с толку, но попробуйте что-нибудь вроде этого:

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

   @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
   }
}

Обратите внимание, что @SessionAttributes объявлен в классе, а не в методе. На самом деле, вы можете поставить, где хотите, но я думаю, что это имеет больше смысла в классе.

На мой взгляд, документация по этому могла бы быть намного яснее.

25
ответ дан 29 November 2019 в 03:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: