我继承了一个Spring MVC应用程序。我对.NET MVC很熟悉,而且我认为我的设计方式有很大不同,但是我的工作与此有关,这就是我想做的事情:
当前设计:
SearchController - 用于提交和呈现搜索结果。每个单独的搜索结果都有一个添加/编辑/删除选项,可以向不同的控制器提交请求。
@RequestMapping(valur={"/searchResult.do"}...) public ModelAndView searchResult(@ModelAttribute GlobalPojo pojo) { //here I'd like to store the pojo in session so that the search results //can be re-rendered after an Add/Edit/Delete action }
CrudController
@RequestMapping(value = { "/modifyAction.do" }, method = { org.springframework.web.bind.annotation.RequestMethod.GET }) public ModelAndView modifyRecord(@RequestParam("id") String uid) { //here I'd like to return to the results page after completing an action }
这个GlobalPojo被用作参数和结果,所以我不能很好地使它成为一个会话范围的bean。我想我能做的是:
然而,我不知道该怎么办才能从CrudController访问searchPojo,因为我想在其上设置一个message属性,以便在搜索结果页面上显示。
我看到将会话传递给控制器动作的示例不使用属性,所以我只是不确定它应该是什么样的。
提前致谢。
答案 0 :(得分:1)
如果您使用的是大于3.1.2.RELEASE的Spring版本,则只需将@SessionAttributes("searchPojo")
添加到CrudController
的顶部,然后指定{{1} }作为ModelAttibute("searchPojo")
方法的参数。
modifyRecord
Spring应该在会话中查找@Controller
@SessionAttributes("searchPojo")
public class CrudController {
...
@RequestMapping(value = { "/modifyAction.do" }, method = { org.springframework.web.bind.annotation.RequestMethod.GET })
public ModelAndView modifyRecord(@RequestParam("id") String uid, @ModelAttribute("searchPojo") SearchPojo pojo) {
//here I'd like to return to the results page after completing an action
}
}
并将其传递给searchPojo
方法。然后,您应该可以在modifyRecord
内的searchPojo
设置邮件属性。
这里有一个使用modifyRecord
在控制器之间共享数据的示例:Spring 3.0 set and get session attribute
答案 1 :(得分:0)
也许您可以尝试从请求中获取会话并将pojo设置为会话属性。