0

我继承了一个 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。我想我能做的是:

  1. 将此添加到 SearchController:@SessionAttributes("searchPojo")
  2. 修改@ModelAttribute --> @ModelAttribute("searchPojo")

但是,我不确定如何从 CrudController 访问 searchPojo,因为我想在其上设置一个 message 属性以显示在搜索结果页面上。

我看到的将会话传递给控制器​​操作的示例不使用属性,所以我只是不确定应该是什么样子。

提前致谢。

4

2 回答 2

1

如果您使用的是大于 3.1.2.RELEASE 的 Spring 版本,这应该只是添加@SessionAttributes("searchPojo")到您的顶部CrudController然后将 指定ModelAttibute("searchPojo")为方法的参数的情况modifyRecord

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

然后 Spring 应该searchPojo在会话中查找 并将其传递给modifyRecord方法。然后,您应该能够在searchPojo内部设置消息属性modifyRecord

这里有一个在控制器之间共享数据的例子SessionAttributesSpring 3.0 set and get session attribute

于 2013-10-14T09:09:40.157 回答
0

也许您可以尝试从请求中获取会话并将 pojo 设置为会话属性。

于 2013-10-13T05:41:17.567 回答