如何将对象列表存储到springMVC Web应用程序中的会话

时间:2017-03-01 13:40:06

标签: java spring-mvc

我想将List存储到会话中,以便我可以根据请求访问它并在单独的控制器中添加/删除/删除对象。我目前有一个Controller正在创建一个List并将其输出到JSON,然后我使用AngularJS从jsp页面访问它。

我尝试通过将List添加到模型来使用@SessionAttributes,但List未正确存储。我是SpringMVC的新手,所以任何关于在哪里寻找的建议/建议都将受到赞赏。

我的控制器创建我的列表:

@RestController
@SessionAttributes({"URLparam", "usersList"})
public class ReportController {

  @RequestMapping(value="/events")
  public List<Appliance> getEvents(@ModelAttribute("URLparam")String userInput, ModelMap model){
    List<Appliance> events = new ArrayList<>();
    events = ProcessChoice.ofList(userInput);
    model.addAttribute("usersList", events);
    System.out.println(userInput);
    return events;
  }
}

我想要编辑现有列表的我的控制器:

@Controller
@SessionAttributes("usersList")
public class EditListController {

  @RequestMapping(value="/testing", method=RequestMethod.GET)
  public String makeChanges(@RequestAttribute("usersList") List<Appliance> usersList) {
    //make changes to list here
    for(Appliance p: usersList) {
        System.out.println(p.getName());
    }
    return "testing";
  }
}

代码抛出:error 400 - Missing request attribute 'usersList' of type List

我可以看到有一个选项可以添加一个集合&lt;&gt;对模型,但我不知道如何存储它,因为它不会让我给它一个名字。

1 个答案:

答案 0 :(得分:1)

在ReportController中,您将列表(&#34; events&#34;)存储在键&#34; usersList&#34;下的模型中。该模型充当可在视图中呈现的数据。这样它就不会存储到Session中。

考虑如下: session.setAttribute(&#34; usersList&#34;,events); 在ReportController中以及EditListController中对应的session.getAttribute(&#34; usersList&#34;)。

你也可以省略@ SessionAttributes-annotation你是这样做的。如果您想使用这些注释,请熟悉其范围(在何处放置它们以及在何处使用它们)和用法:http://vmustafayev4en.blogspot.de/2012/10/power-of-springs-modelattribute-and.html和官方API文档:http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/bind/annotation/SessionAttributes.html

然而,在会话中存储数据似乎是一个好主意,但如果有很多活动会话,通常是应用程序内存占用空间很大的原因 - 只是你知道。