Сохранить список объектов в сеансе / объекте HttpSession в Spring

#java #spring

#java #spring

Вопрос:

Привет всем, я хочу сохранить список объектов в объекте сеанса. Для хранения 1 объекта у меня есть этот код:

 @Controller
@SessionAttributes("temp")
@RequestMapping(value = "/test")
public class TestController {
    @ModelAttribute("temp")
    public Temp setObj() {
        return new Temp();
    }

    @RequestMapping(method = RequestMethod.GET)
    public String test(Model model) {
        model.addAttribute("temp", new Temp());
        return "testInput";
    }

    @RequestMapping()
    public String add(@ModelAttribute("temp") Temp temp, Model model) {
        model.addAttribute("temp", temp);
        return "test";
    }

    @RequestMapping(value = "/get") // or "/getList" to ensure it works
    public String kek(@ModelAttribute("temp") Temp temp, Model model) {
        model.addAttribute("temp", temp);
        return "test";
    }
}
 

Где

 class Temp implements Serializible {
    //constructor fields, methods
} 
 

PS сохранение 1 объекта работает нормально.

Но как я могу сохранить List<Temp> в объекте сеанса и добавить дополнительный Temp объект с помощью контроллера? Или, может быть, я должен использовать что-то вроде:

 class TempList {
    private List<Temp> list
    //constructor, get/set addToList methods
}
 

Если да, как я могу инициализировать этот класс и использовать tempListObj.addToList(Temp temp) метод?

Комментарии:

1. Что значит «инициализировать этот класс»?

Ответ №1:

Для вашей информации, если ваш объект store в сеансе с аннотацией @sessionAttributes, этот объект будет доступен только в области действия этого контроллера. Если вы хотите сохранить список в сеансе, вы можете просто определить @sessionAttributes({«temp»}) на уровне класса и установить это в сеанс в любом методе контроллера, подобном этому:

 model.addAttribute("temp", new ArrayList<Temp>());
 

Затем вы можете получить доступ к этому таким образом:

 public String someMethod(@ModelAttribute("temp") List<Temp> temp) {...}
 

Комментарии:

1. @RequestMapping(method = RequestMethod.GET) public String test(Model model) { model.addAttribute("tempObj", new Temp()); model.addAttribute("list", new ArrayList<Temp>()); return "testInput"; } @RequestMapping() public String add(@ModelAttribute("temp") List<Temp> list, @ModelAttribute("tempObj") Temp temp, Model model) { list.add(temp); model.addAttribute("list", list); return "test"; }

2. Я добавил такой код, но у меня есть Expected session attribute 'temp' , но я добавил model.addAttribute("temp", new ArrayList<Temp>())

3. Я рад, что это помогло вам.