我想将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;对模型,但我不知道如何存储它,因为它不会让我给它一个名字。
答案 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和
然而,在会话中存储数据似乎是一个好主意,但如果有很多活动会话,通常是应用程序内存占用空间很大的原因 - 只是你知道。